将网页转换为pdf电子书

  写爬虫就像从未比用 Python 更稳妥了,Python
社区提供的爬虫工具多得让您眼花缭乱,各样拿来就可以间接用的 library
分分钟就足以写出二个爬虫出来,今天就雕刻着写三个爬虫,将廖雪峰的 Python
教程 爬下来做成 PDF 电子书方便我们离线阅读。
  
  开端写爬虫前,我们先来分析一下该网址壹的页面结构,网页的右边是课程的目录大纲,每一个U凯雷德L
对应到左侧的1篇小说,左侧上方是小说的标题,中间是文章的正文部分,正文内容是大家关切的主要性,大家要爬的数码便是有着网页的正文部分,下方是用户的评论区,评论区对大家不妨用,所以能够忽略它。

皇冠直营现金网开户 1

  工具准备
  
  弄领会了网址的主题构造后就足以起来准备爬虫所依靠的工具包了。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
官网二下载稳定版的展开设置,安装到位之后把该程序的进行路径出席到系统环境
$PATH 变量中,不然 pdfkit 找不到 wkhtmltopdf 就涌出错误 “No wkhtmltopdf
executable found”。Ubuntu 和 CentOS 能够一贯用命令行实行设置

$ sudo apt-get install wkhtmltopdf  # ubuntu
$ sudo yum intsall wkhtmltopdf      # centos

  爬虫完毕
  
皇冠直营现金网开户,  1切准备稳当后就能够上代码了,可是写代码从前依旧先整理一下思路。程序的指标是要把全数UCR-VL 对应的 html 正文部分保存到本地,然后利用 pdfkit 把这么些文件转换来3个pdf 文件。我们把职分拆分一下,首先是把某叁个 U君越L 对应的 html
正文物保护存到地头,然后找到全部的 U大切诺基L 执行同一的操作。
  
  用 Chrome 浏览器找到页面正文部分的价签,按 F1二 找到正文对应的 div
标签: <div class=”x-wiki-content”>,该 div 是网页的正文内容。用
requests 把方方面面页面加载到本地后,就足以行使 beautifulsoup 操作 HTML 的
dom 成分 来提取正文内容了。

皇冠直营现金网开户 2

    具体的贯彻代码如下:用 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)

    第1步就是把页面左侧全体 UCR-VL 解析出来。采纳同样的章程,找到
左边菜单标签 <ul class="uk-nav uk-nav-side">

 

皇冠直营现金网开户 3

    具体代码完成逻辑:因为页面上有七个uk-nav uk-nav-side的 class
属性,而真正的目录列表是第二个。全体的 url 获取了,url 转 html
的函数在首先步也写好了。

 
  Python三-廖雪峰带标签完整版pdf下载:http://www.gooln.com/document/161286.html

def get_url_list():
    """
    获取所有URL目录列表
    """
    response = requests.get("http://www.gooln.com/document/161286.html")
    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.gooln.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 文件就生成了,效果图:

皇冠直营现金网开户 4

 

  总结
  
  总共代码量加起来不到50行,不过,且慢,其实上边给出的代码省略了一些细节,比如,怎么着得到文章的标题,正文内容的
img 标签使用的是相对路径,如若要想在 pdf
中平时彰显图片就需求将相对路径改为绝对路径,还有保存下来的 html
近来文件都要删减,那些细节末叶都位于github上。
  
  完整代码能够上github下载 ,代码在 Windows 平台亲测有效,欢迎 fork
下载本身立异。github 地址叁,GitHub访问不了的同班能够用码云四, 《廖雪峰的
Python 教程》电子书 PDF 文件能够通过关切本公众号『二个程序员的微站』回复
“pdf” 免费下载阅读。

 

 

相关文章