写爬虫似乎没有比用 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 电子书相关推荐

  1. 廖雪峰python教程书-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  2. python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    声明:本文仅供学习参考,切忌用于其它用途,爬的过程中注意控制请求速度,以免给服务器带来过多的压力 写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来 ...

  3. python爬虫教程pdf-Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...

  4. python基础教程廖雪峰云-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  5. 廖雪峰python教程pdf-爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  6. Python 爬虫:把廖雪峰的教程转换成 PDF 电子书

    .前两天,有读者在微信公众平台 问道:可以推荐一本 Python 入门的教程吗? 我说:廖雪峰的 Python 教程 她说:有没有电子书呢? 我说:没有,但你可以用 Google 搜一下,找到了记得发 ...

  7. 使用python将多张图片转换成pdf

    有朋友在问如何通过Python将多张图片转换成pdf,刚好之前写了一个小功能,分享给大家. 不多说,直接上代码: #!/usr/local/python3.6.5 #cd /usr/local/pyt ...

  8. 【Python3.6】:廖雪峰python教程转换成 PDF

    开始写爬虫前,我们先来分析一下该网站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c00 ...

  9. ppt幻灯片如何直接转换成pdf电子书

    有些朋友问我ppt如何转成pdf格式文件?虽然ppt演示文档和pdf文件是两种概念的东西,不少人都习惯在pdf格式文件中阅读信息,直接将ppt转成pdf文件还是可以的,如果你手头有一个现成的ppt文稿 ...

最新文章

  1. Python(27)_字符串的常用的方法2
  2. html css发展前景,网页设计的发展趋势
  3. NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
  4. 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧
  5. 银行业B端数字化转型逻辑
  6. [c#菜鸟]lambda表达式
  7. request 获取各种路径
  8. VS.NET 学习方法论——我的VS.NET学习之旅
  9. 带头结点头部插入创建链表
  10. c++堆栈中 top() pop()的具体作用是什么
  11. ini_set ini_get 可操作配置参数列表 设置默认编码等
  12. 搞懂webdriver的底层原理,才敢说自己懂自动化!
  13. NLP—5.word2vec论文精读
  14. 如何安装2个版本的python
  15. 宝塔mysql主从复制_MySQL主从复制
  16. Pr 电影中常见的回忆效果
  17. 如何学习财务数据分析,有哪些好工具?
  18. GB35114---认证报告
  19. html5 sha1,js-sha1加密
  20. 【每日新闻早报】9月17日 星期二

热门文章

  1. 【动态规划-困难】354. 俄罗斯套娃信封问题
  2. Qt之点击PushButton弹出对话框
  3. python实现分割文件
  4. 应用案例 | 星舆高精度定位器在港口车辆定位管理的应用案例
  5. 大颗粒积木【电话】教案-课堂演示-说课-少儿积木建构创意评测与展示活动
  6. 算安一体 全程可信|移动云安全技术沙龙来袭!
  7. 网站托管,免费网站托管,全自动网站托管方法详解
  8. C# 个人所得税的计算方法
  9. 硬件设计之一——电源设计03:LDO设计
  10. 联想2015财年净亏1.28亿美元