Python3 爬虫 模拟登录验证码处理

        既然说到登录,就不能不提验证码了。现在需要验证码的登录越来越多,那么对于简单的验证码,应该如何使用爬虫来进行识别呢?

一、肉眼识别

        对于一次登录就可以长时间使用的情况,只需要识别一次验证码即可。这种情况下,与其花时间开发一个自动识别验证码的程序,不如直接肉眼识别。肉眼识别验证码有两种情况,借助浏览器与不借助浏览器。

1.1. 借助浏览器

        在模拟登录中讲到过Cookies,通过Cookies能实现绕过登录,从而直接访问需要登录的网站。因此,对于需要输入验证码才能进行登录的网站,可以手动在浏览器登录网站,并通过Chrome获取Cookies,然后使用Cookies来访问网站。这样就可以实现人工输入一次验证码,然后很长时间不再登录。
        有一些网站的验证码是通过单击或者拖动滑块来验证的。对于这种网站,目前最简单的办法就是使用Cookies来登录,其他方式都不好用。

2.2. 不借助浏览器

        对于仅仅需要识别图片的验证码,可以使用这种方式——先把验证码下载到本地,然后肉眼去识别并手动输入给爬虫。
        手动输入验证码的一般流程如下。
        (1)爬虫访问登录页面。
        (2)分析网页源代码,获取验证码地址。
        (3)下载验证码到本地。
        (4)打开验证码,人眼读取内容。
        (5)构造POST的数据,填入验证码。
        (6)POST提交。
        需要注意的是,其中的(2)、(3)、(4)、(5)、(6)步是一气呵成的,是在爬虫运行的时候做的。绝对不能先把爬虫程序关闭,肉眼识别验证码以后再重新运行。在知道了图片的网址以后,就可以使用requests将验证码下载下来,再肉眼识别。一旦验证码被识别了出来,那么剩下的工作就和一般的POST提交没有什么两样了。

        如果有一百个人同时访问网站,就会有一百个不同的验证码,那么网站怎么知道谁应该输入哪个验证码呢?验证码一定和每个人的浏览器有一个一一对应的关系。这种一一对应,可能是通过Cookies来实现的,也可能是通过Session来实现的。所以,当使用浏览器访问验证码页面的时候,网站一定会往浏览器里面写一些验证信息。这就决定了在处理这个验证码识别问题的时候,一定要使用Session模块,绝对不能使用requests.get()直接访问,否则代码量会增加不少。,爬虫会提示用户去手动查看验证码,并在控制台输入给爬虫。爬虫拿到验证码以后,继续使用session将验证码信息POST给检查页面,此时Cookies也会被session自动提交。网站检测到Cookies对应的验证码和用户提交的验证码一致,于是返回验证码识别正确的信息。

二、自动打码

2.1. Python图像识别

        Python的强大,在于它有非常多的第三方库。对于验证码识别,Python也有现成的库来使用。开源的OCR库pytesseract配合图像识别引擎tesseract,可以用来将图片中的文字转换为文本。
        这种方式在爬虫中的应用并不多见。因为现在大部分的验证码都加上了干扰的纹理,已经很少能用单机版的图片识别方式来识别了。所以如果使用这种方式,只有两种情况:网站的验证码极其简单工整,使用大量的验证码来训练tesseract。这里仅仅使用简单的图片来进行介绍。

(1)安装tesseract
        使用Windows的读者,请打开网页下载安装包:https://github.com/tesseract-ocr/tesseract/wiki/Downloads,可以找到.exe安装包。
        使用Mac的读者可以通过Homebrew安装:

brew install tesseract

        使用Ubuntu的读者可以直接通过apt-get安装:

sudo apt-get install tesseract-orc

(2)安装Python库
        要使用tesseract来进行图像识别,需要安装两个第三方库:

pip install Pillow 
pip install pytesseract

        其中,Pillow是Python中专门用来处理图像的第三方库,pytesseract是专门用来操作tesseract的第三方库。
(3)tesseract的使用
        tesseract的使用非常简单。
        ① 导入pytesseract和Pillow。
        ② 打开图片。
        ③ 识别。
        通过以下代码来实现最简单的图片识别:

import pytesseract
from PIL import Image
image = Image.open('验证码.png') 
code = pytesseract.image_to_string(image) 
print(code)

        如果使用Mac OS,并且使用Homebrew安装tesseract,那么有可能程序会报以下错误:
FileNotFoundError: [Errno2] No such file or  directory: ‘tesseract’
        这是因为Homebrew没有把tesseract加入到系统的环境变量的缘故。要解决这个问题,需要修改Python安装文件夹下面的lib/site-packages/pytesseract文件夹中的pytesseract.py文件,将第21行的代码:

tesseract_cmd = 'tesseract'

修改为:

tesseract_cmd = '/usr/local/bin/tesseract'

        要找到这个文件,最简单的办法是在PyCharm中先使用import导入pytesseract,然后,使用Windows和Linux系统的读者按下Ctrl键并单击“pytesseract”即可;使用Mac OS系统的读者按下Command键并单击“pytesseract”即可。这样,PyCharm就会自动打开这个文件。

2.2 在线验证码识别的网站

(1)打码网站介绍
        在线验证码识别的网站,简称打码网站。这些网站有一些是使用深度学习技术识别验证码,有一些是雇佣了很多人来人肉识别验证码。网站提供了接口来实现验证码识别服务。使用打码网站理论上可以识别任何使用输入方式来验证的验证码。
        这种打码网站的流程一般是这样的。
        ① 将验证码上传到网站服务器。
        ② 网站服务器将验证码分发给打码工人。
        ③ 打码工人肉眼识别验证码并上传结果。
        ④ 网站将结果返回。
(2)使用在线打码
        在百度或者谷歌上面搜索“验证码在线识别”,就可以找到很多提供在线打码的网站。但是由于一般这种打码网站是需要交费才能使用的,所以要注意财产安全。
(3)注意事项
        打码网站可能经常使用一段时间就不能使用了,可通过搜索引擎寻找其他的打码网站。通过看打码网站的文档来学习怎么使用,根据网站的说明把打码网站的接口集成到爬虫当中。由于这种打码网站鱼龙混杂,而且小网站众多,因此在选择网站的时候,需要注意以下几点。
        ① 不要选择任何需要提供手机号及身份证照片的网站。
        ② 注册邮箱请使用小号,单独使用密码。
        ③ 如果要交费,注意交费地址。
        ④ 只使用支付宝扫二维码或者微信扫二维码支付,反复确认交费金额,不要在网站上输入密码。
        ⑤ 一次交费不要超过10元。

--------------------------------------

没有自由的秩序和没有秩序的自由,同样具有破坏性。

--------------------------------------

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值