之前爬取了1800多万的知乎用户,因而想生成pdf方便保存和阅读,正好试试wkhtmltopdf+pdfkit。
1:pdfkit是wkhtmltopdf的python封装,因此需要先下载安装wkhtmltopdf,版本wkhtmltopdf-0.12.2.4_mingw-w64,下载地址http://download.csdn.net/download/cainiaowuzui/10024376%20%E2%80%9Cwkhtmltopdf-0.12.2.4_mingw-w64%E2%80%9D
2:使用pip install pdfkit安装pdfkit(版本0.6.1)
这里我选择把丁香医生的文章+回答按获赞数从高到低排序生成pdf。
pdfkit默认是生成带目录书签的pdf.由于内容存储在mongo数据库中,因此我先从mongo数据库中选取出来再通过pdfkit.from_string()生成pdf。
主要知识点:python,pdfkit,mongo,html,知乎爬取
过程中遇到以下问题:
1. 中文乱码,参数中须指定编码options={'encoding': 'utf-8'}
2. pdf目录无法自动生成,经过试验,采用把字符串补成html格式的字符串,且输出文件指定为out.pdf,可以解决问题。
3. 个别回答数据库中没有对应的提问标题,因此去知乎爬取对应的提问,有兴趣爬取知乎的朋友可以参考。
import pymongo
import os
from bson.objectid import ObjectId
import wkhtmltopdf
import pdfkit
import requests
import json
client=pymongo.MongoClient(host="127.0.0.1")
db=client["zhihu"]
wkhtmltopdf_path='F:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
def printpdf(url_token):
cursor=db['article'].find({
"url_token":url_token})
article=list(cursor)
article.sort(key=lambda k :k["voteup_count"],reverse=True)
formatstr='''<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" class=" no-touch">
<head>
<meta charset="utf-8" />
<title>{title}</title>
</head>
<body>
<h1 align='center'>{title}</h1>{content}</body>
</html>
'''
pdfstr=''