想要自动爬取网页内容,但是有些网站需要输入验证码,而验证码总是随机的,为了解决这个问题,首先需要自动获取验证码,然后将其下载下来,最后识别其中文字内容。
前面两步骤还是比较简单的,最后识别文字内容就比较麻烦了,查了很多资料,要用到ocr 文字识别技术,OCR 全称 Optical Character Recognition,是光学字符识别的意思,可以对图像上的文字进行识别。
第一种方案:pytesseract结合pillow库识别。 试了一下,对于非常简单的字符到可以识别,稍微有些干扰就不行了,准确度非常低。
第二种方案:利用opencv结合机器学习,先下载很多的验证码图片,然后将每个验证码中的字符切割出来,接着进行特征标注,训练数据等,效果看了一下,训练的好的准确率能到80左右,差的有些一半都不到,试了一下,效果不是很好,放弃了;还有些说用深度学习的方法,这个自己不是很懂,直接放弃了。
第三种方案:直接使用大公司开发好的OCR接口,试了一下百度的,一般文字清晰,准确率还是很高的,古诗,车牌啥的都没问题,只需要将数据上传到接口,返回json结构数据,使用还是非常简单的。
下面是记录的结果:
安装安装 tesseract ,pytesseract和pillow库。
tesseract并不是python中的,需要安装exe文件。我下载的是最后一个
记住自己安装的位置,我是安装在D盘。
安装成功后,启动命令行,查看版本,发现不行,原来是没有添加到path里面。
打开高级系统设置,添加进环境变量。
重新试一下,成功。
稍微带一点干扰就不准确了。
下面这种非常整齐的,没有背景干扰的还不错。
下面这种就更差了。
之前只是尝试过自然语言的机器学习,这种图片的并没有试过。首先需要自己有很多的验证码数据图片。
这里我找的是中小学教师资格证的网站,有登录验证码。
右键查看源代码,并没有找到图片链接。
不能直接找到链接的,肯定就是js动态获取的,所以就查看网络里面,找到了url链接。
下载一张验证码。