如何使用python抽取pdf表格及文本,并保存到excel

server/2024/11/14 15:08:38/

pdf是一种便携式文档格式,由Adobe公司设计。因为不受平台限制,且方便保存和传输,所以pdf非常受欢迎。

目前市场上有很多pdf工具,大部分是阅读类,也有支持对pdf的修改、转换等功能,但这部分工具不少是收费的。

这次介绍一个开源python工具库-pdfplumber,可以方便地获取pdf的各种信息,包括文本、表格、图表、尺寸等。

pdfplumber在github上有英文官方文档,后面我们会捡重点讲解,先看下如何用pdfplumber提取pdf表格?

以NBA 2020-2021 常规赛数据作为范例,pdf表格如下:

第一步:使用pdfplumber提取表格文本

python"># 导入pdfplumber
import pdfplumber# 读取pdf文件,保存为pdf实例
pdf =  pdfplumber.open("E:\\nba.pdf") # 访问第二页
first_page = pdf.pages[1]# 自动读取表格信息,返回列表
table = first_page.extract_table()table

输出:

第二步:整理成dataframe格式,保存为excel

python">import pandas as pd# 将列表转为df
table_df = pd.DataFrame(table_2[1:],columns=table_2[0])# 保存excel
table_df.to_excel('test.xlsx')table_df

输出:

一个小小的脚本,不到十行代码,便将pdf表格提取并转化为dataframe格式,最终保存到excel

有个初步认知后,接下来详细讲讲pdfplumber的安装、导入、api接口等信息。

pdfplumber_52">pdfplumber简介

前面已经介绍过pdfplumber的功能,也用一个小案例展示了如何提取表格,我觉得对于pdfplumber只需要了解三点就可以。

1、它是一个纯python第三方库,适合python 3.x版本
2、它用来查看pdf各类信息,能有效提取文本、表格
3、它不支持修改或生成pdf,也不支持对pdf扫描件的处理

Github地址https://github.com/jsvine/pdfplumber

pdfplumber_62">pdfplumber安装和导入

同其他python库一样,pdfplumber支持使用pip安装,在命令行输入:

pip install pdfplumber

如果遇到安装慢的问题,可以替换镜像源,会快很多。

pdfplumber安装后,用import导入即可使用:

python">import pdfplumber
....

pdfplumber_76">pdfplumber简单使用

pdfplumber中有两个基础类,PDF和Page。看字面意思能猜出,前者是处理整个文档,后者是处理页面。

pdfplumber.PDF类

属性描述
.metadata获取pdf基础信息,返回字典
.pages一个包含pdfplumber.Page实例的列表,每一个实例代表pdf每一页的信息。

pdfplumber.Page类
这是pdfplumber的核心功能,对pdf的大部分操作都是基于这个类,包括提取文本、表格、尺寸等。
这里暂不一一列举它的属性和方法。

通过一个简单的案例,就可以明白它们的作用。
示例pdf文档,共两页:

  1. 读取pdf
python"># 导入pdfplumber
import pdfplumber# 读取pdf文件,返回pdfplumber.PDF类的实例
pdf = pdfplumber.open("e:\\nba2.pdf")
  1. 获取该pdf文档的信息
python"># 通过pdfplumber.PDF类的metadata属性获取pdf信息
pdf.metadata

输出:

这些是pdf的基础信息,包括作者、来源、日期等。

  1. 总页数
python"># 通过pdfplumber.PDF类的metadata属性获取pdf页数
len(pdf.pages)
  1. 读取第一页的页宽、页高等信息
python"># 第一页pdfplumber.Page实例
first_page = pdf.pages[0]# 查看页码
print('页码:',first_page.page_number)# 查看页宽
print('页宽:'first_page.width)# 查看页高
print('页高:'first_page.height)

输出:

  1. 读取第一页的文本
python"># 读取文本
text = first_page.extract_text()
print(text)

输出:

  1. 读取第二页的表格
python">import pandas as pd# 第二页pdfplumber.Page实例
first_page = pdf.pages[1]# 自动读取表格信息,返回列表
table = first_page.extract_tables()# 将列表转为df
table_df = pd.DataFrame(table_2[1:],columns=table_2[0])table_df

pdfplumber提取表格有很多的细节需要处理,这里给到的范例表格线框比较规范,所以能很简单的提取,但对于线框不完全(包含无线框)的表格,其效果就差了不少。

在实际项目所需处理的pdf文档中,线框完全及不完全的表格都比较多,为了能够理解pdfplumber实现表格抽取的原理和方法,我们需要去细究相关参数的设置。

正如案例所示,pdfplumber.Page对象的.extract_table()方法可以提取表格,返回从页面上最大的表中提取的文本,以列表列表的形式显示,结构为row -> cell。

表格抽取参数设置
默认情况下,extract_table使用页面的垂直和水平线(或矩形边缘)作为单元格分隔符。该方法可以通过table_settings参数进行高度自定义。可能的设置及其默认值:

{"vertical_strategy": "lines", "horizontal_strategy": "lines","explicit_vertical_lines": [],"explicit_horizontal_lines": [],"snap_tolerance": 3,"join_tolerance": 3,"edge_min_length": 3,"min_words_vertical": 3,"min_words_horizontal": 1,"keep_blank_chars": False,"text_tolerance": 3,"text_x_tolerance": None,"text_y_tolerance": None,"intersection_tolerance": 3,"intersection_x_tolerance": None,"intersection_y_tolerance": None,
}

pdfplumber支持对图表进行可视化调试,能输出图像,显示如何提取表。

pdfplumber_195">pdfplumber的独特之处

python中有很多库可以处理pdf,比如PyPDF2、pdfminer等,那pdfplumber的优势在哪呢?

首先,pdfplumber能轻松访问有关PDF对象的所有详细信息,且用于提取文本和表格的方法高级可定制,使用者可根据表格的具体形式来调整参数。

最关键的是pdfplumber作者持续在维护该库,而同样受欢迎的PyPDF2已经不再维护了。


http://www.ppmy.cn/server/100118.html

相关文章

Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC]

文章目录 Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现Journyx soap_cgi.pyc接口XML外部实体注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术…

Java设计模式-抽象工厂模式-一次性理解透

1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似,只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式,或看过上一篇我写的“java简单工厂模式”,您会注意到我们有一个工厂类。此工厂类根据…

使用python时,数据库有分页,如何实现?

在 Python 中实现数据库分页一般是通过 SQL 查询中的 LIMIT 和 OFFSET 子句来实现的。以下是一个示例,展示如何在 ORM 设计中添加分页功能。 分页实现思路 确定每页记录数:用户可以指定每页显示的记录数量。计算偏移量:根据当前页码和每页记…

2024年第四届智慧城市与绿色能源国际会议(ICSCGE 2024)即将召开!

第四届国际智慧城市与绿色能源会议(ICSCGE 2024)将于2024年12月10-13日在澳大利亚悉尼举行,会议旨在汇聚来自世界各地的专家学者,共同讨论智慧城市框架及其在可持续发展和绿色能源领域的最新进展和创新成就。ICSCGE是一个致力于探…

SSHamble:SSH 服务的开源安全测试

runZero 发布了有关安全外壳 (SSH) 暴露的新研究,并推出了相应的开源工具 SSHamble。 该工具可帮助安全团队通过测试不常见但危险的错误配置和软件错误来验证 SSH 实施。 发现弱点 在 2024 年美国黑帽大会的演讲中,HD Moore 和 Rob King 分享了这项研…

谷粒商城实战笔记-175~177-商城业务-检索服务-检索查询接口开发

文章目录 一,175-商城业务-检索服务-检索查询参数模型分析抽取二,176-商城业务-检索服务-检索返回结果模型分析抽取三,177-商城业务-检索服务-检索DSL测试-查询部分四,178-商城业务-检索服务-检索DSL测试-聚合部分问题记录解决方案…

场景感知如何做到成为智能时代下的生活新维度

在日新月异的智能科技浪潮中,场景感知正逐步成为连接物理世界与数字世界的桥梁,深刻改变着我们的生活方式与交互体验。场景感知,简而言之,是指智能系统通过多种传感器和数据分析技术,实时理解并适应当前环境及用户状态…

Redis主从集群的搭建教程

集群结构: 我们搭建的主从集群结构如图: 共包含三个节点,一个主节点,两个从节点。 这里我们会在同一台云服务器中开启3个redis实例,模拟主从集群,信息如下: IPPORT角色192.168.150.1017001ma…