1.python3
2.requests
3.json
4.pdfkit
5.logging
6.手动配置wkhtmltox(window包)
7.wkhtmltox
8.fiddler
上述的环境准备也就是这些依赖库了。
特别要提醒的是pdfkit,也就是以PDF格式保存本地要用到的依赖库。windows下要手动下载和配置wkhtmltox的window包。pdfkit其中的原理是调用wkhtmltox依赖库,而wkhtmltox又是调用电脑上的wkhtmltox.exe实现的。
具体下载和配置过程这里就不废篇幅了,这里给个传送们:
https://blog.csdn.net/appleyuchi/article/details/70947138
(出处:博主Chi Yu’s Blog)
fiddler:手机抓包的一个工具,微信上的文章很多不能直接分析,所以说微信公众号算是最难爬的平台之一吧。
参考了互联网上微信开发的资料信息,分析出其中biz这个参数对应的值是该公众号的唯一标识,类似于你的微信号。offset是用于控制加载的数据量的。至于pass_ticket和appmsg_token作者也不太清楚,不过经过几次的尝试爬取公众号。发现这两个参数会在一定的时间发生变化(一般几个小时),也许这就是微信公众号的一种反爬手段。
定义header和cookies
代码中的cookies跟图片分析的不一样,因为里面的一些参数是会变化的。作者也尝试了别的公众号。
然后定义一个函数,控制offset:
请求的参数定义好了,然后就可以用request访问了:
把访问的js信息通过json读取,并且挖出我们想要的参数信息。
然后通过上面挖出的参数试着将我们要的公众号文章标题和链接打印出来:
经过上述步骤,已经完成了流程图中的第四步了。
接下来就是将爬到的信息转为PDF存在本地了
就是这么一行代码,这里的路径最好设置绝对路径,因为相对路径可能会找不到确切的路径而报错。
上面提到的logging似乎没有用到
其实没用到这个依赖库的时候,报了这样一个错
requests.exceptions.SSLError: HTTPSConnectionPool
这个错误是啥意思呢?
简单的解释就是,有时候我们用浏览器访问一些网站会弹出一个警告“您的链接不是私密链接”。
是因为这个网站的证书没有得到官方的CA机构认证。就是一种证书错误。典型的网址就有“12306.com”
那么python访问的网页为什么会有这样的错误呢?
其实是因为开了fiddler抓包工具,其中的代理证书就是没有得到CA机构认证的。
可以关闭fiddler抓包工具来解决问题,但是要是修改代码的话,又得重新抓取一次数据。所以可以通过以下代码来关闭代理
参数verify = False 就是关闭代理的意思
下面是完整的代码:
这里的代码学习了很多博主的思想,或许因为其中的方法很多,遇到的坑也很多。不过也都一一解决了。
这份代码还有一个坑就是保存的PDF数量跟不上程序运行的速度,PDF里面一些图片显示不出来。
作者分析了一下,解决的方案有:给程序加延时,不过这也影响了爬取的速率,如果读者有更好的方法可以评论区一起探讨学习。
至于PDF图片看不到的原因是因为涉及到HTML中的懒加载和直接加载的知识。这个坑还没填,下次再来完善。有建议或者想法的可以在评论区一起交流。
篇幅很长,感谢细读!