php抓取网页表格信息(如何利用Python的camelot模块从PDF文件中爬取表格数据)
优采云 发布时间: 2022-03-02 09:22php抓取网页表格信息(如何利用Python的camelot模块从PDF文件中爬取表格数据)
本文文章为大家带来Python如何实现从PDF文件中爬取表格数据(代码示例),具有一定的参考价值。需要的朋友可以参考一下,希望对你有所帮助。
本文将展示一个略有不同的爬虫。
过去,我们的爬虫从互联网上抓取数据,因为网页通常是用 HTML、CSS 和 JavaScript 代码编写的。因此,有很多成熟的技术可以抓取网页中的各种数据。这一次,我们需要抓取的文档是 PDF 文件。本文将展示如何使用 Python 的 camelot 模块从 PDF 文件中抓取表格数据。
在我们的日常生活和工作中,PDF文件无疑是最常用的文件格式之一。从教科书和课件到合同和计划书,我们都可以看到这种文件格式。但是如何从PDF文件中提取表格是个大问题。因为 PDF 中没有内部表示来表示表格。这使得表格数据难以提取用于分析。那么,我们如何从 PDF 中抓取表格数据呢?
答案是 Python 的 camelot 模块!
camelot 是一个 Python 模块,它使任何人都可以轻松地从 PDF 文件中提取表格数据。可以使用以下命令安装camelot模块(安装时间较长):
pip install camelot-py
camelot 模块的官方文档地址是:.
下面将展示如何使用 camelot 模块从 PDF 文件中抓取表格数据。
示例 1
首先来看一个简单的例子:eg.pdf,整个文件只有一页,而这一页只有一个表格,如下:
可以使用以下 Python 代码提取此 PDF 文件中的表格:
import camelot
# 从PDF文件中提取表格
tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream')
# 表格信息
print(tables)
print(tables[0])
# 表格数据
print(tables[0].data)
输出是:
[['ID', '姓名', '城市', '性别'], ['1', 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'New York', 'M']]
分析代码,camelot.read_pdf()是camelot从表中提取数据的函数。输入参数为PDF文件的路径、页码(pages)和表格解析方式(有stream和lattice两种方式)。对于table解析方式,默认方式是lattice,stream方式默认会将整个PDF页面解析为一个table。如果需要在解析页面中指定区域,可以使用table_area参数。
camelot 模块的方便之处在于它提供了将提取的表格数据直接转换为 pandas、csv、JSON 和 html 的函数,例如 tables[0].df、tables[0].to_csv() 函数等。以输出的 csv 文件为例:
import camelot
# 从PDF文件中提取表格
tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream')
# 将表格数据转化为csv文件
tables[0].to_csv('E://eg.csv')
生成的 csv 文件如下:
示例 2
在示例 2 中,我们将从 PDF 页面区域中的表格中提取数据。PDF文件的页面(部分)如下:
为了提取在整个页面中唯一的表,我们需要定位到表所在的位置。PDF文件的坐标系与图片不同。它以左下角的顶点为原点,x 轴向右,y 轴向上。可以通过以下Python代码输出整个页面文本的坐标:
import camelot
# 从PDF中提取表格
tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \
flavor='stream')
# 绘制PDF文档的坐标,定位表格所在的位置
tables[0].plot('text')
输出是:
UserWarning: No tables found on page-53 [stream.py:292]
整个代码没有找到表格,因为stream方法默认把整个PDF页面当作一个表格,所以没有找到表格。但是绘制的页面坐标的图像如下:
仔细对比之前的PDF页面不难发现,表格对应区域的左上角坐标为(50,620),右下角坐标为(500 ,540).在read_pdf()函数中加入table_area参数,完整的Python代码如下:
import camelot
# 识别指定区域中的表格数据
tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \
flavor='stream', table_area=['50,620,500,540'])
# 绘制PDF文档的坐标,定位表格所在的位置
table_df = tables[0].df
print(type(table_df))
print(table_df.head(n=6))
输出是:
0 1 2 3
0 Student Pre-test score Post-test score Difference
1 1 70 73 3
2 2 64 65 1
3 3 69 63 -6
4 … … … …
5 34 82 88 6
总结
在PDF页面中具体识别表格时,除了指定区域的参数外,还有下标、下标、单元格合并等参数。详细使用方法请参考 camelot 官方文档网站:.
以上就是Python如何从PDF文件中爬取表格数据(代码示例)的详细内容。更多详情请关注php中文网文章其他相关话题!
声明:本文转载于:segmentfault,如有侵权,请联系删除