今天看啥  ›  专栏  ›  不正经程序员

Python 爬虫闯关(第五关)

不正经程序员  · 掘金  ·  · 2018-09-07 02:23
不正经开场白

这次我们来到了第五关,也是最后一关了,之后黑板客上就没再更新关卡。且闯且珍惜~

关卡汇总见文末。

相较于之前的关卡,本关多了验证码识别的功能,也就是需要对图片验证码进行自动识别。

第五关地址:

http://www.heibanke.com/lesson/crawler_ex04/

页面如下:

第五关

思路其实基本和第三关类似,主要是多了验证码的处理。

可以看出,验证码都是英文大写,并且位置不正,歪扭七八的,这给验证码识别带来了难度。

1

解题思路

先来看一眼请求数据:

请求数据

需要传入后台以下 5 个参数:

  1. username

  2. csrfmiddlewaretoken

  3. password

  4. captcha_0

  5. captcha_1

根据之前的闯关经验,1、2 两项我们都知道。password 我们也只能按照第 2、3 关密码 0~30 尝试。captcha_0 是登录页面上一个隐藏的值,对应的应该是验证码在服务器的 uuid。captcha_1 即验证码。

目前验证码处理仍然是一个比较困难的问题,处理方法一般可以分为自动识别和手动识别。

  • 手动处理 :就是通过验证码链接将验证码图片下载到本地,然后手动敲入完成信息录入。

  • 自动识别 :指使用一些高级的算法技术来完成的,如 OCR 文字识别,机器学习进行识别训练等。一般免费的文字识别算法识别率并不高,收费的识别效率还是可以接受的。

我们先体验一把自动处理,知道处理效果后,再考虑是不是用手动处理。

2

自动识别验证码

处理流程如下:

自动处理流程

这里我们打算使用 Tesseract 进行自动图片识别的尝试。

tesseract-ocr 是一个做图形识别必须用到第一个软件,不仅可以处理验证码,也可以识别图片上的文字等等。其他的这里不再赘述,请自行 Google。

安装可以参考官方文档:

https://github.com/tesseract-ocr/tesseract/wiki

试用下

准备好待识别的图片

待识别图片

可以看出,识别成功,难道识别率这么好吗?

安装其他依赖组件

Pytesseract 是一个 python 的第三方的包,主要作用就是用来连接操作 tesseract-ocr 工具。为我们用 python 来处理图形打好了基础。

Pillow 包是 python 的图形处理库,用来处理调整图形的各种内容。

实现

准备工作差不多了,下面就动手写代码吧!

运行结果:

运行结果

这里我对一些乱码进行了过滤,不过识别结果还是惨不忍睹啊!获取了 447 次,最后终于成功。

心痛

数据训练

识别率很差,但是 tesseract 是可以自行训练的,这样也许能够提升识别率。

训练过程很漫长,这里就不再展开,有兴趣的可以参考:

https://www.cnblogs.com/zhongtang/p/5555950.html。

这里只说下训练结果。

刚开始使用 100 张图片进行训练,但是结果还是不能令人满意,识别的正确率大概只有 10% 左右。

于是我又拉了 500 张图片,并用上次训练的结果再进行训练,这次后很少出现特殊字符了,说明还是有一点效果的,我只能这么安慰自己。

但是正确率还是很低!

欲哭无泪

也许还可以用 TensorFlow 来试一把,我现在实在没力气折腾了,有兴趣的搞一下看看?

另外,百度、腾讯等也有免费的图像识别服务,后面有兴趣我会进行测试,与大家分享。

3

手动识别

手动识别其实就是通过验证码链接将验证码图片下载到本地,然后手动敲入完成信息录入。

需要每次运行时手动输入验证码,运行结果如下:

运行结果

还好运行到 3 就成功了。

回复【爬虫闯关】可以获取本文自动识别和手动识别的源代码。

4

总结

本关的难点就是验证码的处理,用自动识别方法,识别率不高,当然这里我只用了一种方法,有做这方面工作的同学可以尝试用 TensorFlow 来试一把,记得来分享~

后续,我会测试下 百度、腾讯、阿里的图像识别接口,看下它们的识别情况是否能够让人满意,到时再给大家分享。

到这里,爬虫闯关系列就结束了,一共 5 关(所有闯关的文章见文末)。通过这 5 关,我们大致了解了爬虫的一般流程,其中涉及了 cookie 处理、验证码处理、多线程爬虫等知识点,当然不能完全覆盖爬虫所有的知识点,但是我觉得足以应对一般网站的爬取了。

福利  最近搜集到慕课网视频,视频内容涵盖 Python、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。
推荐阅读

我的 Python 学习资源分享

1 行代码,实现微信消息发送

如何优雅地使用 rm 防止误删除?

Python 爬虫闯关(第一关)

Python 爬虫闯关(第二关)

Python 爬虫闯关(第三关)

Python 爬虫闯关(第四关)

Python 爬虫闯关(第四关)- 续

你的关注是我持续写作的动力!

戳原文,查看原文博客。



原文地址:访问原文地址
快照地址: 访问文章快照