成都网站建设设计

将想法与焦点和您一起共享

Python爬虫怎么把教程转换成PDF电子书

本篇内容介绍了“Python爬虫怎么把教程转换成PDF电子书”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联公司主要从事成都做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务呼玛,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

开始写爬虫前,我们先来分析一下该网站[1]的页面结构,网页的左侧是教程的目录大纲,每个 URL 对应到右边的一篇文章,右侧上方是文章的标题,中间是文章的正文部分,正文内容是我们关心的重点,我们要爬的数据就是所有网页的正文部分,下方是用户的评论区,评论区对我们没什么用,所以可以忽略它。

Python爬虫怎么把教程转换成PDF电子书

工具准备

弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了。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 是网页的正文内容。用 requests 把整个页面加载到本地后,就可以使用 beautifulsoup 操作 HTML 的 dom 元素 来提取正文内容了。

Python爬虫怎么把教程转换成PDF电子书

具体的实现代码如下:用 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 解析出来。采用同样的方式,找到 左侧菜单标签

    Python爬虫怎么把教程转换成PDF电子书

    具体代码实现逻辑:因为页面上有两个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 文件就生成了,效果图:

    Python爬虫怎么把教程转换成PDF电子书

    “Python爬虫怎么把教程转换成PDF电子书”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


    名称栏目:Python爬虫怎么把教程转换成PDF电子书
    文章网址:http://chengdu.cdxwcx.cn/article/gsgcdo.html