爬虫:Python下载html保存成pdf——以下载知乎下某个专栏下所有文章为例

  • 首先,需要下载安装支持工具 wkhtmltopdf

    wkhtmltopdf官网

    下载地址

    安装完成后将其下bin目录的绝对路径追加到环境变量中

  • 之前

  • 获取所有文章的url

    简单说一下原理,访问要下载的专栏(我的测试专栏 强化学习前沿)主页可以发现,主页显示的文章列表是动态加载的,每次即将滑动到最底部的时候会动态再加载一批列表出来,通过F12打开检查模式,抓包到动态请求的链接https://zhuanlan.zhihu.com/api/columns/{}/articles?include=data&limit=10&offset=40这是开发中分页显示的操作,limit是一页显示的数量,offset是此页的起始索引,那么只要循环几次就可以获得所有页的文章列表了

    测试发现这里limit的上限为100,即请求一次最多获得100条文章表项

    强化学习论文汇总的一种方式

    通过检查当前页的表项数目,如果少于limit,则视为最后一页,不再继续请求

    我自己用正则写的获取方式

    在主页中获取文章总数,求得页数上限

    emmm,感觉还是人家写的简洁一些

  • mainJob——html to pdf

    这里可以通过两种方式实现

    • 直接通过os.system(wkhtmltopdf命令)执行wkhtmltopdf完成
    • 通过集成功能包pdfkit完成,需要安装pdfkit包

    其中碰到的问题就是直接从url->pdf生成的pdf中没有图片,这是因为网页中的图片地址采用的是相对地址,这样直接访问就无法获取,讲道理得拼接成完整地址,也就是说需要先获得网页内容(str),进行一步预处理,再转成pdf,这里采用了强化学习论文汇总中的方式进行了处理

  • do it

    运行效果

    • 成功的一项

    success

    • 失败的一项

    error

    可以从urls中按索引取出失败的url重新操作,我这里就不再实现了,注意我在print时为了显示效果将索引进行了+1操作

  • 说明

    全部代码,按顺序复制本文代码亦可执行

  • 参考文献

    强化学习论文汇总

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注