抓取网页生成电子书(2019独角兽企业重金招聘Python工程师标准(图)标准)
优采云 发布时间: 2021-09-18 19:06抓取网页生成电子书(2019独角兽企业重金招聘Python工程师标准(图)标准)
2019年独角兽企业大量招聘Python工程师燃气轮机
一些学生总是问,在学习了Python的基础知识之后,他们不知道该做些什么来改进。今天,我将给您提供另一个小示例,告诉您哪些小工具可以通过Python和爬虫来完成
在知乎,您一定注意到了一些好的专栏(例如crossin的编程教室)。但如果有一天,你最喜欢的受访者被喷到互联网上,愤怒地被删除,这些好的内容将不会被看到。虽然这是一个小概率事件(但它永远不会发生),但您可以将您关注的专栏导出为电子书,以防下雨天。通过这种方式,您可以脱机阅读它们,而不必担心意外删除
只需要工具和源代码,就可以拉到文章底部获取代码
[最终效果]
运行程序并输入列的ID,即网页地址上的路径:
之后,程序会自动抓取文章,并根据发布时间将其合并并导出为PDF文件
[实施构想]
本程序主要分为三个部分:
抓取文章地址列表列,抓取文章每篇文章的详细信息并将其导出PDF1.抓取列表
在之前的文章crawler基本工具中,掌握它可以解决一半的问题。我介绍了如何分析网页上的请求。根据该方法,我们可以通过开发者工具的网络功能在栏目页面找到详细列表的请求:
https://www.zhihu.com/api/v4/columns/crossin/articles
在通过next返回的结果中找到,并且是uuend,我们可以得到下一个列表请求的地址(相当于向下滚动页面的触发效果),并判断我们是否得到了所有文章
数据中的ID、标题和URL就是我们需要的数据。因为URL可以通过ID来拼写,所以它不会保存在我们的代码中
使用while循环,直到所有文章ID和标题都被捕获并保存在文件中
while True:
resp = requests.get(url, headers=headers)
j = resp.json()
data = j['data']
for article in data:
# 保存id和title(略)
if j['paging']['is_end']:
break
url = j['paging']['next']
# 按 id 排序(略)
# 导入文件(略)
2.grab文章
对于所有的文章id/url,后续的爬行过程非常简单文章post-richtext的标签中收录了主要内容
一些文本处理需要一些努力。例如,原创页面的图像效果将添加noscript标记和属性,如data actual和Src=“data:image。我们必须删除它们才能正常显示
url = 'https://zhuanlan.zhihu.com/p/' + id
html = requests.get(url, headers=headers).text
soup = BeautifulSoup(html, 'lxml')
content = soup.find(class_='Post-RichText').prettify()
# 对content做处理(略)
with open(file_name, 'w') as f:
f.write(content)
在此步骤中,所有内容都已捕获,可以在本地读取
3.export pdf
为了便于阅读,我们使用wkhtmltopdf+pdfkit将这些HTML文件打包成PDF
Wkhtmltopdf是一个HTML到PDF的工具,需要单独安装。有关详细信息,请访问其官方网站
Pdfkit是由该工具封装的python库,可从PIP安装:
pip install pdfkit
易于使用:
# 获取htmls文件名列表(略)
pdfkit.from_file(sorted(htmls), 'zhihu.pdf')
这就完成了整个列的导出
不仅是知乎列,而且几乎大多数信息类型网站都使用1.grab list2.获取采集数据的详细信息。因此,此代码可以在许多其他网站中使用,只需稍加修改。但是,有些网站需要在登录后访问,因此需要设置标头中的cookie信息。在另外,端口接收到的网站请求不同,参数和限制也不同,因此仍需分析具体问题
关于开发这些爬行动物的小贴士可以在我们的爬行动物战斗课程中学习。如有必要,请在正式帐户中回复爬行动物
[源代码获取]
获取知乎列下载程序源代码,请回复关键字知乎
在官方帐户中(Crossin编程教室)
除了代码外,还提供了本专栏的打包PDF。欢迎阅读和分享
════
其他文章和答案:
欢迎来到搜索和跟随:crossin的编程教室
转载于: