当爬虫遭遇验证码,怎么办
请输入标题 bcdef
公众号有两天断更了,抱歉啊。最近确实有点懈怠了,太累,又赶上假日,想自己放松放松。
回归正题,写爬虫写了这么多,关于验证码的问题,好像我没给大家写过解决办法,今天呢,我就专门写个验证码的,而且是跟模拟登陆结合起来写。相当于一文解决两个问题,说的太满了。是一文开个头写了两方面的问题。
其实遇到验证码,最有效的方法就是人工智能,也就是人工介入。遇到这中图,不用人工智能,让机器怎么办??
还有奇葩的12306火车,所以这些事情,还是得自己动手,丰衣足食。咱么今天写简单的验证码,上图的要点击,这点击的太难,大邓hold不住。案例就是微博手机版吧,这个大家都很感兴趣,都喜欢爬微博,是吧。。。
请输入标题 abcdefg
案例分析
请输入标题 bcdef
对象
我们选择手机版微博
https://weibo.cn/login/
PC端有各种加密,把你的账号密码加密,加密方式还很难找到。感觉很坑,所以今天就模拟手机微博版吧。
首先我们打开开发者工具,准备抓包。先填充好账号密码验证码(我这里会先填充一个错误的密码,大家看看手机微博多么的不安全,所以我不敢录制视频🙄)
看到上图了嘛,密码直接是明文,没有经过任何加密。当然了,对我们来说,写爬虫也就容易了。
但是,密码password后面怎么有个数字呢?
而且发现每次都不一样。看我第二次刷新请求后
密码的名字居然再变化!!!
没关系,一切都可以在源码中找到,包括验证码网址,vk,capID等
我们打开网页的源码
我们检查发现vk和capID都是对的,下面我们检查下验证码
打开浏览器网址输入框,输入验证码网址,回车键
现在vk 、capID、密码名,验证码等都有了。
我们只需要构造号这些参数就可以。有个问题,出现验证码,我们怎么让python爬虫脚本自己识别并输入正确的验证码呢?
怎么对付验证码??
无解,只能人工介入。这是现在最火的技术,人工智能嘛。哈哈,步骤如下:
1、打开验证码图片网址,下载验证码图片
2、人工打开验证码图片,人工识别。
3、input()函数运行弹出一个输入框,用来获取验证码
5、验证码连同账号密码等其他参数一同添加到请求中,对手机微博进行访问。
6、模拟登录成功,可以愉快的写爬虫了。
请输入标题 bcdef
wow,是不是很激动很开心啊。我们先捋一捋思路,要淡定懂不
模拟登陆思路
请输入标题 bcdef
一、对https://weibo.cn/login发起请求,新浪微博会返回登录界面
二、脚本会对服务器返回的网页源码进行解析,提取出vk、 capID、验证码图片的网址,并且下载图片
三、脚本弹出输入框,待我们输入验证码。
连同之前准备好的账号,密码,提取的vk、capID一同构造成请求头向微博服务器发起请求。
四、登录成功,可以愉快的爬任何网页。后面的我们就不讲了,今天我们只模拟登陆。
请输入标题 abcdefg
开始码代码
要想从网页源码中找到密码名、vk,capID,验证码url,这里我们用到正则表达式。
先建立模板,想要的数据用(>*?)去匹配。
详情我就不解释了,直接上代码,运行正常,反悔了想要的这些数据
下面我们写一个下载验证码的函数
打开项目文件夹,发现真的有一张验证码图片
下面我们开始构造请求数据部分
这里我们要再加一个判断,判断输入的验证码是否输入正确。
我故意输错验证码,结果却没有打印出“验证码输入错误”。证明咱们还是有问题!!到底在哪里呢??
我在浏览器中输入正确的账号密码,故意输错验证码,点击登录,效果如下。发现提交数据的网址跟我们代码中所提交的
'https://weibo.cn/login/'的不一样啊。
很有可能是提交数据的网址出了问题。那么怎么获取这个网址呢?
我估计应该还是在请求登录页面的源码中
我们看到上图中有form,有method=post,说明这框住的是点击登录时提交的表单动作。所以我们真正的目标url是
url = longin_url+action值
这里就不写如何获得action值了,跟之前匹配vk capID一样,匹配的文件都是请求登录页面的
大家今天先学会验证码处理,模拟登陆,至于后续登录后的爬取,后面我会再讲。
今天放一张我公众号效果图,分享数不是很大。为了大家能学到验证码处理机制,如果本文分享数超过15,我就录制模拟登陆和验证码的视频。
这难度不是很大,大家努力下吧。
回复“验证码”,即可获得本项目代码
请输入标题 abcdefg
更多内容
大数据
爬虫
【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”
【视频】快来get新技能--抓包+cookie,爬微博不再是梦
文本分析
神奇的python
回复“验证码”,即可获得本项目代码