使用python将在线电子书转成pdf

1、环境准备

    重要事情卸载最前面,代码中出现的一些encoding='utf-8',是必须的,没有这个设定中文会出现乱码。安装requests、bs4和pdfkit的python第三方库,到https://wkhtmltopdf.org/downloads.html下载转换工具。依据自己的系统和python 的版本进行下载安装,在widows平台还需要将安装路径中的bin目录路径添加到环境变量。

    以一本书作为例子说明,其他的电子书也可以使用类似的操作方式,不同页面的构成不一样,要根据特定页面进行分析。个人感觉使用正则去匹配网页的内容会比较科学,奈何不会正则。

2、分析网页元素,类似爬虫的操作

导入的库和其他变量定义

import pdfkit
import requests
from bs4 import BeautifulSoup
url = 'http://python3-cookbook.readthedocs.io/zh_CN/latest/'
wb_data = requests.get(url)
wb_data.encoding = 'utf-8'

all_urls = []

第一步找到所有书页的url,保存到一个list

if wb_data.ok:
    soup = BeautifulSoup(wb_data.text,'html.parser')
    div = soup.select('.toctree-l2')
    for i in div:
        temp_url = i.contents[0]['href']
        if '#' in temp_url:
            if temp_url.split('#')[0] not in all_urls:
                all_urls.append(temp_url.split('#')[0])
        else:
            all_urls.append(temp_url)

可选步骤,测试所有页面链接是否都ok,如果最后打印的的值len(all_urls)相同,页面链接可用

cnt = 0
print(len(all_urls))
for i in all_urls:
    wb_data = requests.get(url + i)
    if wb_data.ok:
        print(cnt+1)

分析正文内容,并取出来写到html中

f = open('python cookbook 第三版.html','w',encoding='utf-8')
for i in all_urls:
    print(i)
    wb_data = requests.get(url + i)
    if wb_data.ok:
        wb_data.encoding = 'utf-8'
        soup = BeautifulSoup(wb_data.text,'html.parser')
        div = soup.select('.document')[0]

        for i in div:
            f.write(str(i))
f.close()

3、手动微调生成html的内容,生成的html会有一个类似锚的标志,用sublime打开,删掉所有的特殊标记,最后生成pdf

f = open('torch.html','r',encoding='utf-8')
pdfkit.from_file(f,'torch_guide.pdf',options={'encoding':'utf-8'})

你可能感兴趣的:(网页)