1、pdfkit模块用途
- pdfkit是将网页转换成pdf文档的一个模块。
- 安装教程:http://blog.csdn.net/appleyuchi/article/details/70947138
- 与wkhtmltopdf的区别:wkhtmltopdf用法见:将html网页转换成pdf形式工具 。pdfkit模块用于Python中,更具有可操作性,可以将网页中需要的部分转化成pdf文档;而wkhtmltopdf则是直接将整个网页转化成文档。
2、pdfkit用法
简单讲,可以有以下三种用法,第一个参数为将要转化的html链接(文件,或字符串),第二个参数为保存在本地的pdf文档名称。
import pdfkit
pdfkit.from_url('https://www.google.com.hk','out1.pdf')
pdfkit.from_file('123.html','out2.pdf')
pdfkit.from_string('Hello!','out3.pdf')
3、实例
- 比如将某新闻的正文部分转化成pdf文档。
- 以该新闻为例:http://news.sina.com.cn/c/nd/2017-09-09/doc-ifykusey6584342.shtml
import requests
from bs4 import BeautifulSoup
import pdfkit
html_template = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
{content}
</body>
</html>
"""
res = requests.get('http://news.sina.com.cn/c/nd/2017-09-09/doc-ifykusey6584342.shtml')
soup = BeautifulSoup(res.content,'html.parser')
article = soup.select('.article.article_16')[0]
article = str(article)
html = html_template.format(content = article)
html = html.encode('utf-8')
with open('news_china.html','wb') as f:
f.write(html)
pdfkit.from_file('news_china.html','news.pdf')
print('succeed')
需要注意以下几点:
我们获取的只是html中的正文部分,而要得到一个完整的html文档,还需要html_template部分。并用.format()形式加入。
第18行中,res.content 得到字节方式的响应体。如果改成res.text得到的是字符串方式的响应体。关于requests的用法,详见:第三方库requests详解
打开文档的格式为’wb’,需要以二进制格式写入html文档。
- 20行,需要将tag格式的aritcle转化成str格式的,才能用.format()方法
- 22行,需要将str格式的html转化成字节形式的,才能以wb方式写入文件中。