查看原文
其他

当爬虫遭遇验证码,怎么办

2017-04-02 大邓 大邓带你玩python

请输入标题     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

更多内容

大数据

大数据时代,你如何成为弄潮儿

爬虫

 知易行难

 用词云图解读“于欢案”

【视频】于欢案之网民的意见(1)?

【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”

【视频】快来get新技能--抓包+cookie,爬微博不再是梦

【视频教程】用python批量抓取简书用户信息

  爬豆瓣电影名的小案例(附视频操作)

  爬豆瓣电影名的小案例2(附视频操作)

  python代理爬虫抓豆瓣电影数据(一)

  python代理爬虫抓豆瓣电影数据(二)

  用Python抓取百度地图里的店名,地址和联系方式

  Python大法好:贴吧爬虫大法

文本分析

  python居然有情感??真的吗??

  基于共现发现人物关系的python实现

  用python计算两文档相似度

神奇的python

 怜香惜玉,我用python帮助办公室文秘

 逆天的量化交易分析库-tushare

 开扒皮自己微信的秘密

 8行代码实现微信聊天机器人

 使用Python登录QQ邮箱发送QQ邮件


回复“验证码”,即可获得本项目代码

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存