Python 爬虫:把教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 Python 教程 爬下来做成 PDF 电子书方便大家离线阅读。
开始写爬虫前,我们先来分析一下该网站1的页面结构,网页的左侧是教程的目录大纲,每个 URL 对应到右边的一篇文章,右侧上方是文章的标题,中间是文章的正文部分,正文内容是我们关心的重点,我们要爬的数据就是所有网页的正文部分,下方是用户的评论区,评论区对我们没什么用,所以可以忽略它。
工具准备
弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了。requests、beautifulsoup 是爬虫两大神器,reuqests 用于网络请求,beautifusoup 用于操作 html 数据。有了这两把梭子,干起活来利索,scrapy 这样的爬虫框架我们就不用了,小程序派上它有点杀鸡用牛刀的意思。此外,既然是把 html 文件转为 pdf,那么也要有相应的库支持, wkhtmltopdf 就是一个非常好的工具,它可以用适用于多平台的 html 到 pdf 的转换,pdfkit 是 wkhtmltopdf 的Python封装包。首先安装好下面的依赖包,接着安装 wkhtmltopdf
pip install requests
pip install beautifulsoup
pip install pdfkit
安装 wkhtmltopdf
Windows平台直接在 wkhtmltopdf 官网2下载稳定版的进行安装,安装完成之后把该程序的执行路径加入到系统环境 $PATH 变量中,否则 pdfkit 找不到 wkhtmltopdf 就出现错误 “No wkhtmltopdf executable found”。Ubuntu 和 CentOS 可以直接用命令行进行安装
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬虫实现
一切准备就绪后就可以上代码了,不过写代码之前还是先整理一下思绪。程序的目的是要把所有 URL 对应的 html 正文部分保存到本地,然后利用 pdfkit 把这些文件转换成一个 pdf 文件。我们把任务拆分一下,首先是把某一个 URL 对应的 html 正文保存到本地,然后找到所有的 URL 执行相同的操作。
用 Chrome 浏览器找到页面正文部分的标签,按 F12 找到正文对应的 div 标签: <div class="x-wiki-content">
,该 div 是网页的正文内容。用 requests 把整个页面加载到本地后,就可以使用 beautifulsoup 操作 HTML 的 dom 元素 来提取正文内容了。
具体的实现代码如下:用 soup.find_all 函数找到正文标签,然后把正文部分的内容保存到 a.html 文件中。
def parse_url_to_html(url):response = requests.get(url)soup = BeautifulSoup(response.content, "html5lib")body = soup.find_all(class_="x-wiki-content")[0]html = str(body)with open("a.html", 'wb') as f:f.write(html)
第二步就是把页面左侧所有 URL 解析出来。采用同样的方式,找到 左侧菜单标签 <ul class="uk-nav uk-nav-side">
具体代码实现逻辑:因为页面上有两个uk-nav uk-nav-side的 class 属性,而真正的目录列表是第二个。所有的 url 获取了,url 转 html 的函数在第一步也写好了。
def get_url_list():"""获取所有URL目录列表"""response = requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000")soup = BeautifulSoup(response.content, "html5lib")menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]urls = []for li in menu_tag.find_all("li"):url = "http://www.liaoxuefeng.com" + li.a.get('href')urls.append(url)return urls
最后一步就是把 html 转换成pdf文件了。转换成 pdf 文件非常简单,因为 pdfkit 把所有的逻辑都封装好了,你只需要调用函数 pdfkit.from_file
def save_pdf(htmls):"""把所有html文件转换成pdf文件"""options = {'page-size': 'Letter','encoding': "UTF-8",'custom-header': [('Accept-Encoding', 'gzip')]}pdfkit.from_file(htmls, file_name, options=options)
执行 save_pdf 函数,电子书 pdf 文件就生成了,效果图:
本文转自 https://juejin.cn/post/6844903463063650311,如有侵权,请联系删除。
Python 爬虫:把教程转换成 PDF 电子书相关推荐
- 廖雪峰python教程书-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
声明:本文仅供学习参考,切忌用于其它用途,爬的过程中注意控制请求速度,以免给服务器带来过多的压力 写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来 ...
- python爬虫教程pdf-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...
- python基础教程廖雪峰云-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- 廖雪峰python教程pdf-爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
.前两天,有读者在微信公众平台 问道:可以推荐一本 Python 入门的教程吗? 我说:廖雪峰的 Python 教程 她说:有没有电子书呢? 我说:没有,但你可以用 Google 搜一下,找到了记得发 ...
- 使用python将多张图片转换成pdf
有朋友在问如何通过Python将多张图片转换成pdf,刚好之前写了一个小功能,分享给大家. 不多说,直接上代码: #!/usr/local/python3.6.5 #cd /usr/local/pyt ...
- 【Python3.6】:廖雪峰python教程转换成 PDF
开始写爬虫前,我们先来分析一下该网站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c00 ...
- ppt幻灯片如何直接转换成pdf电子书
有些朋友问我ppt如何转成pdf格式文件?虽然ppt演示文档和pdf文件是两种概念的东西,不少人都习惯在pdf格式文件中阅读信息,直接将ppt转成pdf文件还是可以的,如果你手头有一个现成的ppt文稿 ...
最新文章
- Python(27)_字符串的常用的方法2
- html css发展前景,网页设计的发展趋势
- NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
- 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧
- 银行业B端数字化转型逻辑
- [c#菜鸟]lambda表达式
- request 获取各种路径
- VS.NET 学习方法论——我的VS.NET学习之旅
- 带头结点头部插入创建链表
- c++堆栈中 top() pop()的具体作用是什么
- ini_set ini_get 可操作配置参数列表 设置默认编码等
- 搞懂webdriver的底层原理,才敢说自己懂自动化!
- NLP—5.word2vec论文精读
- 如何安装2个版本的python
- 宝塔mysql主从复制_MySQL主从复制
- Pr 电影中常见的回忆效果
- 如何学习财务数据分析,有哪些好工具?
- GB35114---认证报告
- html5 sha1,js-sha1加密
- 【每日新闻早报】9月17日 星期二