有时在微信公众号上面看到一些写的比较好的文章,但又没有时间细看,闲下来想找这些文章的时候又忘了是在哪个公众号看的了、文章名字也想不起来,因此想搞个爬虫把想看的文章爬下来,一来可以在闲时咀嚼一下,二来也可以收藏一些好文章,做些知识积累。
只是想把自己平常做的一些东西记录下来,非教程
工具
- Python 3.5.1
使用的库
- re
- pdfkit
- requests
- BeautifulSoup
功能
输入微信文章名称或者对应的文章链接,输出文章的pdf文件。
思路
- 如果同时提供文章链接和文章名称,则优先通过文章链接爬取,如果文章链接爬取失败,则通过文章名称爬取;
- 如果仅提供文章链接,则通过文章链接爬取;
- 如果仅提供文章名称,则通过搜狗微信接口搜索微信文章,找到对应文章链接,然后在通过文章链接爬取。
爬取流程
获取文章链接
将提供的文章名称传入搜狗微信搜索引擎搜索,将结果列表中的第一篇文章作为目标文章下载。下面代码返回目标文章链接。
|
|
将文章转为html
解析文章链接,将文章内容保存为html文件。这里需要注意的是,在解析文章的时候,如果文章中包含有图片的话,正常情况下是无法下载下来的,因为爬取的文章链接为临时链接,非永久链接,无法直接解析src里面的链接。但是,data-src这个属性的值还是可以解析出来的,所以只要把data-src替换为src就可以下载图片了。
|
|
html转pdf
html文件转pdf调用了pdfkit这个包,使用这个包需要安装wkhtmltopdf软件(pdfkit依赖于wkhtmltopdf,因此需要配置路径)。
在运行过程中,发现pdfkit在html转pdf时,生成的pdf文件名中如果包含有| / *这些特殊符号时会报错,因此如果以原文章名对pdf命名失败时,仅保留文章名的汉字、字母和数字进行命名。
|
|
源代码
最后附上文章爬取的完整代码。