前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: zeroingi
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
今天这篇文章主要介绍的是关于微信公众号文章的爬取,其中里面主要涉及的反爬机制就是 js加密与cookies的设置 ;
微信公众号的上一个版本中的反爬机制中并没有涉及到js加密,仅通过监控用户ip,单个ip访问太频繁会面临被封的风险;在新的版本中加入了js加密反爬机制,接下来我们来逐步分析一下文章爬取过程 打开搜狗页面搜狗微信页面,在输入框中输入任意关键词例如火车隧道起火,搜出来的都是涉及关键词的公号文章列表
https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS_yBZajb90fWf-LwgFP7QmnFtbELADqFzFqXa8Fplpd9nrYbnf-BG6fJQmhdTDKRUQC_zVYwjAHQRnKwtfQUOD-aNBz2bhtCuShQywQb837B12cBkYFsYkKXir7Y9WqlRBcZIrhUAYmFlBSVIg7YGFbBdu4rXklGlRslEFpw0lTmIX8pHfpQ9x6clCHaA92qoA9YOaIV2yOyrE-focNFXq7wdVqCwyPdzA..&type=2&query=%E7%81%AB%E8%BD%A6%E9%9A%A7%E9%81%93%E8%B5%B7%E7%81%AB
但是直接点这个链接返回的是402页面,需要输入验证码进行验证,而且验证码通过后依然进不去;很明显这个url并不是文章的访问入口
https://mp.weixin.qq.com/s?src=11×tamp=1567073292&ver=1820&signature=z2h7E*HznopGFidmtUA4PmXgi3ioRqV7XiYIqn9asMT3RCMKss6Y2nPUh7RG63nrwmRii77cL9LyDNJIVp1qpo5LHvQ8s754Q9HtCgbp5EPUP9HjosY7HWDwze6A2Qi7&new=1
是不是很很意外;这里开始就需要转变思路:不管怎样最好先抓一下包,这里我利用的工具是Fidder,关于Fidder如何使用,可以参照这篇文章: 先从搜索页面的文章列表中进入文章的详情页,我们需要通过Fidder来监控一下文章的跳转情况:
看到没,惊奇地发现有个 /link?url 开头的url跳转成功了,深入一下,我们再看一下这个链接返回的是什么,点一下response部分的TextView;
把这个访问成功的并且以link?url开头的url完整复制下来,与源码中的那个 link?url 放在一起,发现这个访问成功的url中多了两个参数一个是k一个是h
现在基本爬取核心思路已经知道了,主要就是破解这两个参数k和h,拼接成'真'的url( 以/cl.gif开头的 ),然后获取真url; 关于这两个参数的破解就是涉及到了js加密,需要进行调试,不懂的可以参考这篇文章:Chrome DevTools 中调试 JavaScript 入门;
第一步,回到源码中 link?url 位置的地方,因为后面两个参数的增加是由于我们触发了这个假的url,所以这里需要对假的url进行监听: 开发者工具[Elements] -> 右上角处的[Event Listeners] -> [click] -> 你需要监控的元素标签;
其中SUNID有固定得访问次数/时间限制,超过了限制直接变为无效,并且当访问网页请求失败后,SUNID与SUV需要更换才能再次正常访问
SUV参数是在 ‘真’url 过度到 真url 中某个网页中Response里的Set-Cookie中生成的,也就是下面这个网页: