爬虫验证码识别初体验(文末代码)

Posted 蕉下客Ne

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫验证码识别初体验(文末代码)相关的知识,希望对你有一定的参考价值。

今天分享一个爬虫登录时候验证码识别的案例。
文末会给 代码的。 Wink~)

其实我在登录的时候一般是手动操作,目的是拿到cookie。因此不管登录时候遇到什么问题都无所谓。另一个原因是登录过程中需要定位啊,提交啊,通常采用selenium这个包,次数多的话我觉得它比较慢,所以一般也不用。最近开始关注验证码、滑块、拼图等反爬措施,以后应该也能用上。
以下内容来自对崔庆才老师书籍内容的学习,因为自己的实操,所以代码有部门改动,这个案例算是入门级吧,比较简单。
下面对这个网站进行登录:https://captcha7.scrape.center/。

爬虫验证码识别初体验(文末代码)

从图片上可以感觉到,这个网站比较简单,用户名和密码都填admin就好,主要目的就是识别出验证码。验证码是一个图片,图片上包含数字和字母,数字字母旁边有一些干扰项(黑点之类的。)
这里就用selenium这个包来模拟浏览器的访问和点击等,需要提前下载driver,(有适用于不同浏览器的driver,我常用的是chromedriver。)
用以下代码定位到用户名、密码的位置以及验证码的链接,从而拿到验证码的图片:
browser.find_element_by_css_selector('.username input[type="text"]').send_keys('admin')browser.find_element_by_css_selector('.password input[type="password"]').send_keys('admin')captcha = browser.find_element_by_css_selector('#captcha')
以上的三行代码分别代表用户名、密码和验证码图片的定位。
为了识别验证码图片上的数字和字母,需要用到工具包。崔老师原代码里用的是tesserocr,tesserocr是python的一个OCR识别库,可以做到字母和数字的识别。但是在我的实战中,发现这个包很难搞。首先是安装,pip install总是办错,后来费了大半天劲安装好了。发现一个重要的函数image_to_text没有,这个函数缺失也就无法得到结果了。
因此,这里建议安装pytesseract这个包,安装和调用都很方便。
pip install pytesseract
获取到图片后,首先对图片进行一个预处理。
def preprocess(image): image = image.convert('L') array = np.array(image) array = np.where(array > 50, 255, 0) image = Image.fromarray(array.astype('uint8')) return image
预处理可以理解为对图片的去噪。

爬虫验证码识别初体验(文末代码)

上图是网站上出现的原始图片,经过预处理之后,图片变为:

爬虫验证码识别初体验(文末代码)

可以发现,干扰点被去除了,颜色也变成了灰白(灰度处理)。经过处理之后更容易识别。
接下来通过 pytesseract这个包可以直接拿到识别结果,调用image_to_string函数即可得到结果。
captcha = pytesseract.image_to_string(image)captcha = re.sub('[^A-Za-z0-9]', '', captcha)browser.find_element_by_css_selector('.captcha input[type="text"]').send_keys(captcha)browser.find_element_by_css_selector('.login').click()
从下图可以看到,验证码识别准确。

再通过以上代码将识别出的验证码提交,就完成验证啦~

最后需要说明的是, pytesseract这个包可以用,但并不是百分百准确的,做数字和字母的组合验证其实也可以自己写一个算法,很多分类算法都可以用。我记得我本科时候就写过一个识别车牌号的作业,当时用的SVM算法。因此,如果觉得这个包不好用,也可以自己写。
最后,获取本文的完整代码,关注公众号且回复:验证码,就可以啦!
(只有30+行)
今天是2020年12月30日,祝大家新年快乐~新的一年,健康美丽又有钱~

以上是关于爬虫验证码识别初体验(文末代码)的主要内容,如果未能解决你的问题,请参考以下文章

Swifter初体验;按照惯例,来一个Swift版本的:iOS图片验证码?

爬虫日记-验证码识别

深度学习与爬虫实例教学--深度学习模型构建和训练

⚡爬虫高级篇⚡五行代码识别验证码—— ddddocr(带带弟弟OCR)

第二十三节:scrapy爬虫识别验证码图片验证码识别

爬虫教程验证码识别