应用场景
只要折腾过爬虫的都应该会迟早碰到这个问题:验证码。如果无法解决这个问题,估计踏入爬虫学习的第一步就会受到满满的一大盆冷水。因为只要是一个有那么一点点反爬虫的网站都会有验证码。今天就要详细分析分析这一个问题。
解决方法一:cookie
学习爬虫必须要知道这个东西,Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
你们有没有发现,有些网站只登录过一次,那么可以很长的一段时间都不需要登录。那是因为有cookie的存在。所以我们只要带着正确的cookie进行请求网站,这就可以绕过登录,也绕过了验证码。不过有些网站的cookie很烦,经常变换,也不知道多久变一次。所以是否用这种方法,需要看实际效果。
解决方法二:半自动化爬虫
在技术宅怒爬qq空间表白墙,自动化编程的福利哦|Python 主题月就提过,selenuim是网站自动化的工具。他可以模拟人工点击网站,操作网站。其实用low一点的办法,能够进去网页,问题也不大,也就是半自动化操作。自己手动输入验证码。反正最后还是可以进入网站爬取信息的。初学者不用纠结于这个验证码是否手动输入,只要爬取的动作还是代码进行的就行。
解决方法三:全自动化爬虫
我认真找了一下这个验证码
发现他的返回是一个PassCode.aspx。而请求的url也可以找到。我们一定觉得很奇怪,明天他们是图片,为什么他不是png或者jpg呢?其实这是因为验证码需要做着动态响应,当我们点它一下的时候,它就会变换成不同的验证码。我们每点一次,都会把上面的连接请求一次。
接下来,我们需要保存这个验证码。他是aspx格式,我们需要把他保存为gif。
具体代码如下:
import requests
url = 'http://appsso.pc139.zgyey.com/PassCode.aspx'
r = requests.get(url = url)
content = r.content
f =open(r'C:\Users\Administrator\Desktop\aaa.gif','wb')
f.write(content)
f.close()
最后能把验证码顺利保存下来。
接下来,我们要做的是切割图片,然后用图片识别的技术把验证码识别出来,这里最后识别出来的结果也就是一个3+6这一条公式。还有别的验证码识别出来更加简单,也就是4个数字。
以后我会详细写一篇如何识别验证码图片的文章。完整爬虫思路就是上面所说。