网页视频抓取工具 知乎(通过Python和爬虫,可以完成怎样的小工具?|知乎)
优采云 发布时间: 2022-03-27 01:11网页视频抓取工具 知乎(通过Python和爬虫,可以完成怎样的小工具?|知乎)
总有同学问,学了 Python 的基础知识后,不知道能做些什么来提高它。今天就用一个小例子来告诉大家,通过Python和爬虫可以完成什么样的小工具。
在知乎,你一定关注过一些不错的专栏(比如Crossin 的编程课堂)。但万一哪天,你喜欢的回答者被喷到网上,你一气之下删帖停止更新,你就看不到这些好内容了。虽然这是小概率事件(但不会发生),但要注意,可以将关注的栏目导出为电子书,这样可以离线阅读,不怕误删帖。
如果只需要工具和源码,可以拉到文章底部获取代码。
【最终效果】
运行程序,输入列的id,就是网页地址上的路径:
之后程序会自动抓取列中的文章,并根据发布时间合并导出为pdf文件。
【实现思路】
本方案主要分为三个部分:
抓取列文章地址列表抓取每个文章导出PDF1.的详细信息抓取列表
在之前的文章爬虫必备工具中,掌握它就解决了一半,我介绍了如何分析网页上的请求。按照方法,我们可以利用开发者工具的Network功能,找出栏目页面的请求,得到明细列表:
1
2
3https://www.zhihu.com/api/v4/columns/crossin/articles
4
5
6
观察返回的结果可以发现,通过next和is_end的值,可以得到下一个列表请求的地址(相当于向下滚动页面的触发效果),判断是否全部文章已获得。
data中的id、title、url就是我们需要的数据。因为 url 可以用 id 拼出,所以我们的代码中没有保存。
使用 while 循环,直到 文章 的所有 id 和标题都被捕获并保存在文件中。
1
2
3while True:
4 resp = requests.get(url, headers=headers)
5 j = resp.json()
6 data = j['data']
7 for article in data:
8 # 保存id和title(略)
9 if j['paging']['is_end']:
10 break
11 url = j['paging']['next']
12 # 按 id 排序(略)
13 # 导入文件(略)
14
15
16
2. 抢文章
有了 文章 的所有 ids/urls,后面的抓取就很简单了。文章正文内容在 Post-RichText 标签中。
需要花点功夫的是一些文字处理,比如原页面的图片效果,会添加noscript标签和
1`
, 突出显示">
1
2
3url = 'https://zhuanlan.zhihu.com/p/' + id
4html = requests.get(url, headers=headers).text
5soup = BeautifulSoup(html, 'lxml')
6content = soup.find(class_='Post-RichText').prettify()
7# 对content做处理(略)
8with open(file_name, 'w') as f:
9 f.write(content)
10
11
12
至此,所有内容都已经爬取完毕,可以在本地读取了。
3. 导出 PDF
为了方便阅读,我们使用 wkhtmltopdf + pdfkit 将这些 HTML 文件打包成 PDF。
wkhtmltopdf 是一个 HTML to PDF 工具,需要单独安装。详情请参考其官网介绍。
pdfkit 是一个包装了这个工具的 Python 库,可以从 pip 安装:
1
2
3pip install pdfkit
4
5
6
使用简单:
1
2
3# 获取htmls文件名列表(略)
4pdfkit.from_file(sorted(htmls), 'zhihu.pdf')
5
6
7
这样就完成了整个列的导出。
不仅是知乎栏目,几乎大部分信息网站,通过1.抓取列表2.抓取详细内容采集数据这两个步骤. 所以这段代码稍加修改就可以用在很多其他的网站s上。只是有些网站需要登录才能访问,那么就需要在headers中设置cookie信息。另外,不同网站的请求接口、参数、限制等都不一样,具体问题还是需要分析的。
【源码下载】
除了代码,还提供了本专栏的打包PDF,欢迎阅读和分享。
════
其他 文章 和答案:
如何自学Python | 新手指南 | 精选 Python 问答 | Python 单词表 | 人工智能 | 嘻哈 | 履带式 |
欢迎搜索关注:Crossin的编程课堂