社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 爬虫闯关(第五关)

不正经程序员 • 8 年前 • 789 次点击  
不正经开场白

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

关卡汇总见文末。

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

第五关地址:

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 爬虫闯关(第四关)- 续

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

戳原文,查看原文博客。

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/yFNFZU3kra
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23674