作者:xiaoyu
微信公众号:
知乎:Python数据分析师
不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息,甚至可以根据需要来对它们进行有效的查看和管理。是的,没错,这完全可以。本篇博主将会给大家分享一下如何,并展示模拟登录后获取的。
微信模拟登录的过程比较复杂,当然不管怎么样方法都是万变不离其宗,我们还是使用抓包工具来模拟登录的过程。 好了,下面让我们一步一步的详细讲解一下如何实现的这个复杂的过程。
首先,我们在浏览器上打开微信网页版(已经在这之前打开了),然后我们会看到一个二维码的界面。
然后我们使用手机微信扫描并确认,这时候网页版的微信就登陆了。
好,我们去看看都给我们抓取了什么信息包。由于过程中发出的请求有点多,这里把抓包按操作进行分解并逐一分析。
这一步骤的抓包是这样的,发现其中的两个链接是我们需要的。
于是点开详细分析一下。
第一个链接如下,是一个,可以看到uri中携带了一些参数。
经过多次抓取发现参数都是固定的,而是一串变化的数字,我们在之前模拟京东商城的文章提过,它其实是一个,如果不清楚可以回顾一下[Python爬虫实战之(四)| 模拟登录京东商城][1]
知道这些参数,模拟get发送出去就可以了。那么我们为什么要模拟这一步呢?
是因为访问这个链接会有如下的响应,而其中有我们后续需要的重要信息(后面步骤会提到)。
微信网页提供的登录方式是扫码,我们模拟也无法避开,因此也要进行扫码验证。回到浏览器,使用开发者工具可以轻松找到二维码的链接。
我们发现最后的字符串是变化的。等等,它和一模一样的。没错,它就是,用来保证二维码的唯一性。
因此,我们将上面提取的拼接到后面就可以得到二维码图片了,然后进行扫码确认操作。
为了识别扫码是否成功,这个步骤我们需要用到上面提到的第二个链接。
这个链接也是个,同样携带了一些参数。
实际上在抓包过程发现只要我们不扫描二维码,这个链接就会一直重复发送直到二维码被扫描或者超时。
那么我们如何判断二维码是否被扫描或者已经登陆了呢?
还是通过响应的数据来进行判断的。经分析发现如果二维码一直没被扫,那么响应是这样的:
但是如果二维码被扫描了,响应是这样的:
说明二维码被扫描成功了。 说明是登录成功了。
扫描了二维码之后,上会多出几个新的请求。
你可能发现了,上一步骤中code=200后面有个重定向的uri,这个uri就是此步骤中跳转的登录链接。
通过上一步骤识别登录成功的响应我们可以得到响应里面的所有参数。没错,这些参数正好可以用在正式登录()的请求中。于是我们利用这些参数再进行一次get请求。携带参数如下:
当然,这个登录请求同样也会返回一些响应代码,响应代码如下:
又是一堆参数,简直没完没了啊。别着急,我们已经接近成功了。获取这个响应我们一样需要将其中的参数全部提取出来供下一请求使用。
好了,终于到了最后一步了,就是微信的初始化和同步的请求了,初始化信息链接如下:
联系链接如下:
uri中参数在上一步的响应中已获取,直接发送请求即可完成。从这两个链接的响应中,我们就可以得到一些真实有用的信息了。
还有一个同步的请求链接,所需参数可以从上面两个链接响应中提取。但是至此我们通过上面两个链接已经可以获取我们想要的信息,因此可以不必请求这个同步链接。
基本的登录过程就是这样,有点复杂,博主总结了个流程图供参考。
请求模拟使用模块完成,解析使用。这里需要注意一下,如果运行一直报的错,可以在request请求里面加上了跳过证书认证来解决。
1.初始化参数
定义一个类,初始化实例的所有请求参数,定义二维码的路径。
2.请求uuid
使用正则对相应进行提取获取,通过判断请求是否成功,响应如下:
3.模拟获取二维码
使用请求二维码图片,并根据操作系统自动打开。
4.识别登录状态
响应如下:
根据响应中的code代码识别登录状态。 :超时 :已扫描 :已登录
5.登录
请求跳转的登录链接,提取响应代码参数,响应如下:
6.初始化获取信息
请求初始化的链接,获取初始化响应数据。
请求的链接,获取联系人、公众号、群聊以及个人信息。响应代码为格式,如下:
根据响应中字段信息做信息操作,这里是获取好友列表,所以将其它字段如公众号、群聊、自己都去掉了,只保留好友信息。
7.主函数运行
好友列表如下:
当然,好友列表只是个例子,我们也可以对其它信息进行查看和管理或者数据分析。
本篇与大家分享了网页版微信的模拟登录过程。尽管过程中请求多有点复杂,但是只要我们仔细分析还是可以一步一步实现的,希望对大家有帮助,代码已上传到github:链接
完毕。
关注微信公众号Python数据科学,获取 人工智能 学习资料。