没错,它就是fiddler啦。
极致简约的界面,老外写的软件就是看得舒服,它的基本使用我就不说啦,而且他还有一个好玩的用处,就是可以用来对那些异步刷新的页面进行爬取,异步刷新就是像于百度图片或者查看微信历史文章时,它并不是像一般的网站直接会返回所有的html信息,而是在使用者光标下滑到底时,再在同一个页面刷新出新的内容,然后就可以继续往下翻啦。从我们的角度来看就像网页变长了,但实际上这是一种异步请求返回数据的技术,好处就是只用建立一个TCP连接,而不用重新再打开新的网页,省去了三次握手的时间消耗,这明显要节约时间。(可能现在网速太快了感觉不出来呃。。。)
所以我用能用它来爬去公众号的消息,比如俺对研究生招生个公众号发布的信息挺感兴趣的,他们公众号的风格是这样的:
哇这不是学长学姐们最爱的复试经验贴么,此外好多别的信息,我滴任务就是把他们全都爬下来,804篇?好像有点多emmmmm
呃出了点意外,刚才是想写完程序再写文章的,可是因为刚才请求过多,腾讯把我的账号直接封停了,也不是封停吧,就是它那边的服务器“暂时”(希望…)把我的请求屏蔽了,所以现在的结果是这样的:
哈哈哈哈哈哈哈哈哈,不过我数据已经爬下来了,就说一下思路吧,就是之前在我一直下滑的时候,可以在fiddler上面看到有很多信息一直在请求,类似这样的:
而且右边的表单是:
请求返回的数据是json格式的:
其中一些对我们有价值的信息是offset表示偏移量,count=10表示一次js请求返回10篇内容,对应我们的十篇文章,对我的直观的感受就是每当下滑10篇文章就刷新一次,然后可以接着往下看,next_offset就是下一个请求的偏移量,这些都是构成url的组成成分;而文章真正的地址的信息则藏在返回的json数据中。
因此我们可以得到思路,通过fiddler抓包,根据刷新时产生的请求和表单数据,来推断出浏览器和服务器之间的数据交流方式,从中截取数据再人为的广义化来找到下一次请求的规律,这样可以用程序一直往下请求同时爬取我们需要的信息。
具体代码:
这表示网站的基地址,即所有的请求都是在这个上面建立的。
构造请求头和Cookies,这个可以想象成把程序伪装成熟人作案,这个很好也很符合正常世界,熟人作案成功率当然会高一些hhhhhhha,不过在这里是必要的,因为微信有它自己的反爬措施,不加Cookies等连数据都返回不了~
构建参数params,请求信息的ur就等于上面的base_url + params。
数据获取函数,其中的:
这两行就可把网页转化为pdf格式保存,python就是好用hhhhhhhhha。
运行的结果也很nice:
是爬了好多,不过我也不会去看的哈哈哈哈哈哈,纯粹技术上的喜欢而已,这周真的丰收的一周呀,总结就到这吧~