php抓取网页表格信息(如何利用Python的camelot模块从PDF文件中爬取表格数据)

优采云 发布时间: 2022-03-02 09:22

  php抓取网页表格信息(如何利用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,如有侵权,请联系删除

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线