抓取网页生成电子书(通过Python和爬虫,可以完成怎样的小工具?|知乎)

优采云 发布时间: 2022-02-22 21:06

  抓取网页生成电子书(通过Python和爬虫,可以完成怎样的小工具?|知乎)

  总有同学问,学了 Python 的基础知识后,不知道能做些什么来提高它。今天就用一个小例子来告诉大家,通过Python和爬虫可以完成什么样的小工具。

  在知乎,你一定关注过一些不错的专栏(比如Crossin 的编程课堂)。但万一哪天,你喜欢的答主被喷在网上,你一气之下删帖停止更新,这些好内容就看不到了。虽然这是一个小概率事件(但不是从未发生过),但请采取预防措施。您可以将您关注的专栏导出为电子书,以便您可以离线阅读它们,并且不怕误删帖子。

  如果只需要工具和源码,可以拉到文章底部获取代码。

  【最终效果】

  运行程序,输入列的id,就是网页地址上的路径:

  

  

  之后程序会自动抓取列中的文章,并根据发布时间合并导出为pdf文件。

  【实现思路】

  本方案主要分为三个部分:

  抓取列 文章地址列表 抓取每个的详细信息 文章导出 PDF 1. 抓取列表

  在之前的文章爬虫必备工具中,掌握它就解决了一半,我介绍了如何分析网页上的请求。按照方法,我们可以利用开发者工具的Network功能,找出栏目页面的请求,得到明细列表:

  

  观察返回的结果,我们发现通过next和is_end的值,可以得到下一个列表请求的地址(相当于向下滚动页面的触发效果),判断是否所有文章s已获得。

  data中的id、title、url就是我们需要的数据。因为 url 可以用 id 拼出,所以我们的代码中没有保存。

  

  使用 while 循环,直到 文章 的所有 id 和标题都被捕获并保存在文件中。

  whileTrue: resp = requests.get(url, headers=headers) j = resp.json() data = j['data']

  文章数据:

  # 保存id和title(省略) ifj[ 'paging'][ 'is_end']:

  breakurl = j['paging']['next']

  # 按id排序(省略)

  # 导入文件(略)

  

  2. 抢文章

  有了 文章 的所有 ids/urls,后面的抓取就很简单了。文章正文内容在 Post-RichText 标签中。

  需要一点努力的是一些文本处理。比如原页面的图片效果,会添加不带data-actual、src="data:image等标签和属性的效果。我们必须去掉它们才能正常显示。

  url = ''+ idhtml = requests.get(url, headers=headers).textsoup = BeautifulSoup(html, 'lxml')content = soup.find(class_= 'Post-RichText').prettify()

  # 处理内容(略)

  withopen(file_name, 'w') asf: f.write(content)

  

  至此,所有内容都已经爬取完毕,可以在本地读取了。

  3. 导出 PDF

  为了便于阅读,我们使用 wkhtmltopdf+ pdfkit 将这些 HTML 文件打包成 PDF。

  wkhtmltopdf 是一个 HTML to PDF 工具,需要单独安装。详情请参考其官网介绍。

  pdfkit 是一个包装了这个工具的 Python 库,可以从 pip 安装:

  点安装pdfkit

  使用简单:

  # 获取htmls文件名列表(略)

  pdfkit.from_file(排序(htmls), '知乎.pdf')

  

  这样就完成了整个列的导出。

  不仅是知乎栏目,几乎大部分信息网站,都是通过1.抓取列表2.抓取详细内容这两个步骤采集数据。所以这段代码稍加修改就可以用在很多其他的网站s上。只是有些网站需要登录才能访问,那么就需要在headers中设置cookie信息。另外,不同网站的请求接口、参数、限制等都不一样,具体问题还是需要分析的。

  这些爬虫的开发技巧可以在我们的爬虫实战课程中学习。如有需要请在公众号回复实际爬虫

  【源码下载】

  获取知乎栏目下载器源码,请在公众号(Crossin的编程课堂)回复关键字知乎

  除了代码,还提供了本专栏的打包PDF,欢迎阅读和分享。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线