今天遇到一个批量读取pdf文件中表格数据的需求,样式大致是如下这样:
html
python读取PDF无非就是三种方式(我所了解的),pdfminer
、pdf2htmlEX
和 Tabula
。综合考虑后,选择了最后一种。下面对三种方式分别介绍:java
该方式从网上搜索的结果是,能够提取pdf文本数据,可是提取后表格信息就乱了。因此本人没有亲自实验,就果断放弃了实验该方法。若是只是提取pdf里面的文本内容,该方式多是比较合适的。python
该方式是经过把pdf格式转换成html格式,而后再提取信息的方法。
Github: https://github.com/coolwanglu/pdf2htmlEX
需先下载pdf2htmlEX可执行程序,下载地址:https://github.com/coolwanglu/pdf2htmlEX/wiki/Download。git
#-*- conding: utf-8 -*- import subprocess subprocess.call('"D:\Program Files (x86)\pdf2htmlEX-win32-0.14.6-upx-with-poppler-data\pdf2htmlEX.exe" --dest-dir E:\\test\extract\\2017gq\\out E:\\test\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf', shell=True)
执行以上代码,会在指定目录 E:\test\extract\2017gq\out 下生成对应html文件,浏览器中查看效果:
github
能够看到总体转换的效果很是不错,可是转换后的标签没有特色,使数据的提取变得很是困难。多番尝试后,感受该方法不够通用,无法解决个人需求。也许对于单纯的pdf转html,该方式多是最好的选择。shell
Tabula是专门用来提取PDF表格数据的,同时支持PDF导出为CSV、Excel格式。
官网: http://tabula.technology/
Github: https://github.com/chezou/tabula-py
首先安装tabula-py: pip install tabula-py
tabula-py依赖库包括java、pandas、numpy,因此需保证运行环境中安装了这些库。浏览器
#-*- conding: utf-8 -*- import tabula df = tabula.read_pdf("E:\\test\\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf", encoding='gbk', pages='all') print(df) for indexs in df.index: # 遍历打印企业名称 print(df.loc[indexs].values[1].strip())
执行以上代码,成功打印出表格中的全部企业名称,查看打印的 df 的结构,以下图:
code
以上三种方式中,最后一种方式完美的解决了个人从PDF表格中提取数据的需求,但愿能抛砖引玉,你们在使用时选择最适合本身的方法,若有介绍不当之处,望留言中指正,谢过。htm