背景
在厦门工作许久一直没有机会了解厦门的历史,所以选择在厦门地方志网站上爬取厦门历史典故,包括当地风俗、厦门名字的由来等等信息,搜集工作肯定交给爬虫处理,最后通过 pdfkit 实现网页保存为 PDF 的功能,方便日后慢慢细读。
使用的库
- reuqets
- lxml
- pdfkit
详细代码及注释
import requests
import lxml
from lxml import etree
import pdfkit
#地方志仅有两页,故而不做翻页处理,直接放入列表中迭代
urls = ['http://www.fzb.xm.gov.cn/xmws/', 'http://www.fzb.xm.gov.cn/xmws/index_1.htm?page=2']
#变量保存wkhtmltopdf.exe的路径,不需要设置环境变量了
path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
#设置pdfkit的配置参数,方便后续找到exe文件
config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
#将地方志存在的链接进行迭代
for url in urls:
#网站比较简单,没有做反爬,直接 GET 请求即可
web_data = requests.get(url)
#使用etree对网页文件进行解析
root = etree.HTML(web_data.text)
#通过//命令获取网页中符合条件的元素
#元素检索条件为 div 标签, class 属性为 tit_gzdt_c
#并获得详细标题及 URL 地址
reconders = root.xpath("//div[@class='tit_gzdt_c']/ul/li/a")
for reconder in reconders:
title = reconder.xpath('./text()')[0]
url = urls[0] + str(reconder.xpath('./@href')[0]).replace(r'./', '')
print(title, url)
try:
# pdfkit 支持三种方法,分别是 from_url(), from_file(), from_string()
# from_url 直接将链接对应网址转为 PDF 文件
# from_file 将 HTML 文件转为 PDF 文件
# from_string 将字符串转为 PDF 文件
pdfkit.from_url(url, title+r'.pdf', configuration=config)
#由于 pdfkit 会报异常错误导致程序无法执行,增加 try 命令跳过异常
#跳过异常未对文件的写入造成影响
except BaseException:
pass
实现效果
遇到的问题
Q1: 如何安装 pdfkit?
A1: 执行命令pip install pdfkit
Q2:安装 pdfkit 后无法使用 from_url() 方法
A2:还需安装 wkhtmltox 软件,下载地址。安装中请记住安装位置,并在程序中手动设置 bin 目录
Q3:程序运行提示OSError: No wkhtmltopdf executable found: "b''"
A3:检查安装路径是否配置正确,默认安装路径为C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
后记
Ptyhon 自学过程中对学习路线或是程序上遇到问题难以排除,可站内私信我,或是添加 QQ:723831904,互相交流学习,目前自学 Flask 框架中,欢迎同好交流探讨