700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python如何实现从PDF文件中爬取表格数据(code)

Python如何实现从PDF文件中爬取表格数据(code)

时间:2024-08-14 04:36:48

相关推荐

Python如何实现从PDF文件中爬取表格数据(code)

后端开发|Python教程

python

后端开发-Python教程

本篇文章给大家带来的内容是关于Python如何实现从PDF文件中爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

java社区源码,ubuntu魅族体验,爬虫概念作用,cityshop php,seo咨询柳州lzw

本文将展示一个稍微不一样点的爬虫。

以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据。这次,我们需要爬取的文档为PDF文件。本文将展示如何利用Python的camelot模块从PDF文件中爬取表格数据。

在我们的日常生活和工作中,PDF文件无疑是最常用的文件格式之一,小到教材、课件,大到合同、规划书,我们都能见到这种文件格式。但如何从PDF文件中提取其中的表格,这却是一个大难题。因为PDF中没有一个内部的表示方式来表示一个表格。这使得表格数据很难被抽取出来做分析。那么,我们如何做到从PDF中爬取表格数据呢?

答案是Python的camelot模块!

camelot是Python的一个模块,它能够让任何人轻松地从PDF文件中提取表格数据。可以使用以下命令安装camelot模块(安装时间较长):

微快达源码论坛下载,vscode编译txt,ubuntu亮度调节,安装版 tomcat,sqlite修改数据,网页设计资讯,mysql中如何导出数据库,建行网银 找不到服务器,js 地区选择插件,bi 前端框架,税务爬虫,php 转换字符串,泰安seo,springboot4大特性,标签云的教程,网站开发工作日志,修改网页源码数据教程,前台登录注册模板下载,后台管理静态页面,javascript注册页面代码,学生信息管理系统vs,万年历 java程序lzw

pip install camelot-py

camelot模块的官方文档地址为:https://camelot-py.readthedoc…。

下面将展示如何利用camelot模块从PDF文件中爬取表格数据。

微信租房源码,vscode 实用的扩展,ubuntu 麒麟 关系,阿里云80 tomcat,sqlite3找不到程序,厨房间好多小爬虫怎么办,php 小数部分,什么是seo推广收录,国外一个小说网站源码,舞蹈学校介绍模板下载lzw

例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两个方法)。对于表格解析方法,默认的方法为lattice,而stream方法默认会把整个PDF页面当做一个表格来解析,如果需要指定解析页面中的区域,可以使用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( ext)

输出结果为:

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].dfprint(type(table_df))print(table_df.head(n=6))

输出的结果为:

012 30 Student Pre-test score Post-test score Difference1 1 7073 32 2 6465 13 3 6963-64 ……… …5 34 8288 6

总结

在具体识别PDF页面中的表格时,除了指定区域这个参数,还有上下标、单元格合并等参数,详细地使用方法可参考camelot官方文档网址:https://camelot-py.readthedoc…。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。