引言
最近在爬一个网站,然后爬到详情页的时候发现,目标内容是用pdf在线预览的
比如如下网站:
https://camelot-py.readthedocs.io/en/master/_static/pdf/foo.pdf
根据我的分析发现,这样的在线预览pdf的采用了pdfjs加载预览,用爬虫的方法根本无法直接拿到pdf内的内容的,对的,你注意到了我说的【根本无法直接拿到】中的直接两个字,确实直接无法拿到,怎么办呢?只能把pdf先下载到本地,然后用工具转了,经过我查阅大量的相关资料发现,工具还是有很多:
1.借用第三方的pdf转换网站转出来
2.使用Python的包来转:如:pyPdf,pyPdf2,pyPdf4,pdfrw等工具
这些工具在pypi社区一搜一大把:
但是效果怎么样就不知道了,只能一个一个去试了,到后面我终于找到个库,非常符合我的需求的库 ——camelot
camelot可以读取pdf文件中的数据,并且自动转换成pandas库(数据分析相关)里的DataFrame类型,然后可以通过DataFrame转为csv,json,html都行,我的目标要的就是转为html格式,好,废话不多说,开始搞
开始解析
1.安装camelot:
pip install camelot-py
pip install cv2 (因为camelot需要用到这个库)
2.下载pdf:因为在线的pdf其实就是二进制流,所以得按照下载图片和视频的方式下载,然后存到本地的一个文件里,这个步骤就不多说了
3.解析:
importcamelot
file= ‘temp.pdf‘table= camelot.read_pdf(file,flavor=‘stream‘)
table[0].df.to_html(‘temp.html‘)
以上的temp.html就是我希望得到的数据了,然后根据我的分析发现,在read_pdf方法里一定带上参数 【flavor=‘stream‘】,不然的话就报这个错:
RuntimeError: Please make sure that Ghostscript is installe