Python从PDF中提取表格数据
文章目录
1、环境说明
操作系统 : Winodws
语言 : Python 3.8.5
IDE : PyCharm 2019.3.5 (Professional Edition)
框架 1 : pdfplumber 0.5.28 官网
框架 2 : camelot 0.8.2 官网
说明 : 这两个框架近期还算活跃,很多框架都1年以上没有活跃,就不考虑了。
PS : PyCharm 在 Windows 操作系统下,使用虚拟环境 安装依赖包,可能会报错,可以尝试 参考,通过安装后缀名为 .whl 的文件,实现离线安装。
PS : 测试用的 pdf 文档 下载地址。
2、pdfplumber
代码
import pandas as pd
import pdfplumber
pdf = pdfplumber.open("D:\\Cache\\foo.pdf")
page = pdf.pages[0]
table = page.extract_table()
df = pd.DataFrame(table)
df.to_excel("D:\\Cache\\foo.xlsx", header=False, index=False)
测试结果
优缺点分析
优点:
1、因为这个框架,不是专门设计用来提取 表格数据,所以可以通过 text 对数据进行搜索,根据关键字只提取目标数据;
2、准确率高;(暂时没发现有数据错误提取的情况)
缺点:
1、表格 title 复杂,导致提取结果提取不全;(title 一般没那么重要,大多数情况下可以忍受)
2、提取数据导出到 Excel 或者 CSV 需要使用 pandas 框架,学习成本更高一点,不过也还可以接受;
3、camelot
代码
import camelot
# read the pdf file
tables = camelot.read_pdf('D:\\Cache\\foo.pdf', pages='1-end')
# json, excel, html, sqlite
tables.export('D:\\Cache\\foo.xlsx', f='excel')
测试结果
PS : 测试过程中,发现会出现数据错误提取的情况。因为涉及用户数据,没办法截图提供。
优缺点分析
优点:
1、直接导出到 Excle 或者 CSV 中,无需引入其他框架,编程简单;
2、导出数据 Excel 排版漂亮,根据页码 + 表格编号创建 sheet;
缺点:
1、没办法对数据进行搜索,只能根据页码进行数据提取;
2、存在错误读取数据的情况;(根据数据提取结果,酌情考虑框架的选择)
4、总结
两个框架各有优缺点。
情况一 : pdf 文档中所有表格全部提取,并且表格比较简单,提取过程中不会出错的情况下, camelot 绝对是最优选。
情况二 : 只提取固定的表格数据,推荐使用 pdfplumber 。