本文作者:杨慧琳

本文编辑:周聪聪

技术总编:张学人有问题,不要怕!访问

http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx(复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难

在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取。那么如何才能高效提取出pdf文件中的表格数据呢?

Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格。因此,本推文也主要介绍pdfplumber库在pdf表格提取中的作用。

作为一个强大的pdf文件解析工具,pdfplumber库可迅速将pdf文档转换为易于处理的txt文档,并输出pdf文档的字符、页面、页码等信息,还可进行页面可视化操作。使用pdfplumber库前需先安装,即在cmd命令行中输入:

pip install pdfplumber

pdfplumber库提供了两种pdf表格提取函数,分别为.extract_tables( )及.extract_table( ),两种函数提取结果存在差异。为进行演示,我们网站上下载了一份短期融资券主体信用评级报告,为pdf格式。任意选取某一表格,其界面如下:

接下来,我们简要分析两种提取模式下的结果差异。

(1).extract_tables( )

可输出页面中所有表格,并返回一个嵌套列表,其结构层次为table→row→cell。此时,页面上的整个表格被放入一个大列表中,原表格中的各行组成该大列表中的各个子列表。若需输出单个外层列表元素,得到的便是由原表格同一行元素构成的列表。例如,我们执行如下程序:import pdfplumberwith pdfplumber.open(r'F:\python\财务报表\主体评级报告.pdf') as pdf:page = pdf.pages[45] #设置操作页面for row in page.extract_tables() :print(row)print(row[0]) #打印外层列表第一个元素

输出结果:

(2).extract_table( )

返回多个独立列表,其结构层次为row→cell。若页面中存在多个行数相同的表格,则默认输出顶部表格;否则,仅输出行数最多的一个表格。此时,表格的每一行都作为一个单独的列表,列表中每个元素即为原表格的各个单元格内容。若需输出某个元素,得到的便是具体的数值或字符串。如下:with pdfplumber.open(r'F:\python\财务报表\主体评级报告.pdf') as pdf:page = pdf.pages[45]for row in page.extract_table() :print(row)print(row[0])     #打印每个列表对应的第一个元素

输出结果:

在此基础上,我们详细介绍如何从pdf文件中提取表格数据。其中一种思路便是将提取出的列表视为一个字符串,结合Python的正则表达式re模块进行字符串处理后,将其保存为以标准英文逗号分隔、可被Excel识别的csv格式文件,即进行如下操作:import pdfplumberimport re#提取出单个表格数据with pdfplumber.open(r'F:\python\财务报表\主体评级报告.pdf') as pdf:page = pdf.pages[45]table = []for line in page.extract_table() :table.append(line)t0 = re.sub('年 份','年份',str(table))t1 = re.sub('\], \[','\n',t0) #进行分行t2 = re.sub('\'\, \'',' ',t1) #将各个元素用空格分隔开t3 =re.sub('\[\[|\]\]|\,|\'|\-','',t2) #删除特殊符号等f = open(r'F:\python\财务报表\主体评级报告.csv','w')f.write(re.sub(' ',',',t3)) #单元格元素用逗号分隔,便于分列读入Excelf.close()

输出结果:

爬虫俱乐部是您身边的科研助手,能够为您在数据处理、实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:

https://ke.qq.com/course/286526?tuin=1b60b462,

python 提取pdf表格_用Python提取pdf文件中的表格数据相关推荐

  1. python docx 替换文字_查找并替换.docx文件中的文本 - Python

    我一直在寻找一种方法来查找和替换docx文件中的文本而运气不佳 . 我已经尝试过docx模块而无法使用它 . 最后,我使用zipfile模块计算了下面描述的方法,并替换了docx存档中的documen ...

  2. python读excel乱码_解决Python2.7读写文件中的中文乱码问题

    Python2.7对于中文编码的问题处理的并不好,这几天在爬数据的时候经常会遇到中文的编码问题.但是本人对编码原理不了解,也没时间深究其中的原理.在此仅从应用的角度做一下总结, 1.设置默认编码 在P ...

  3. access 套用表格_在Excel 2013工作表中导入Access数据的方法

    Excel与Access同为数据处理软件,它们在功能上各有侧重.Access精于数据管理和分类,而Excel则长于数据统计和计算.这两个软件处理过的数据是可以互相调用的,综合应用这两个软件,取长补短, ...

  4. wps怎么在后面加入表格_如何在WPS文档中插入表格

    在办公中经常会用到表格,表格可以将复杂的数据以行或列的形式展现出来,使数据更加直观,更加清晰,下面我们就介绍下如何在文档中插入表格. (1)插入表格.插入表格的方法很多,可以直接单击"插入& ...

  5. Python提取PDF文件中的表格文本保存为Excel文件

    "Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020 ...

  6. python提取pdf表格数据_Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...

  7. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  8. ajax从mysql提取数据在html中_Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...

  9. python与贝叶斯_用Python实现贝叶斯定理

    写作说明 上一期我们讲了贝叶斯分类器,其中有很多的概率基础知识和贝叶斯定理.但是讲解的很没有重点,前半部分讲的是贝叶斯基础知识,最后很突兀的插进来一个文本分析-贝叶斯分类器.很多童鞋看到很累.其实上一 ...

最新文章

  1. Java:全局变量(成员变量)与局部变量
  2. Vue涉及国家安全漏洞?尤雨溪亲自回应
  3. 台式机计算机操作系统怎么看,电脑操作系统是32位还是64位的怎么查看
  4. 顺序表应用2:多余元素删除之建表算法
  5. 1分钟看懂:java 项目中 VO 、DTO、Entity,各自是在什么情况下应用的
  6. Hemberg-lab单细胞转录组数据分析(七)-导入10X和SmartSeq2数据Tabula Muris
  7. 最近见了几位东半球的顶级技术大拿
  8. SQL导入Excel数据时,数字中混有字符将导致数据丢失的解决办法
  9. EOS project 中 的一个 jsp 文件中 调用 javascript函数的问题
  10. LeetCode 5354. 通知所有员工所需的时间
  11. [转]Arrays.sort()你应该知道的事
  12. 优秀课件笔记——财政学1
  13. hadoop处理excel数据
  14. 后缀树总结-java版
  15. 林语堂的《武则天传》读后感
  16. SVG实现网易云心动动画(HTML+CSS)
  17. 在线生成透明ICO图标神器
  18. 计算机音乐谱大全告白气球,周杰伦《告白气球》钢琴曲谱
  19. 记录TI电量计采集化学ID过程
  20. 访客登记无需排队-智能访客登记系统-从线上预约到室内导航寻车-为企事业单位提高更便利的人员访问服务

热门文章

  1. k8s 集群一键部署(持续更新)
  2. cd linux自带系统安装,Windows 7+CDLinux+Ubuntu 10.04全硬盘安装
  3. 推荐有关Qt书籍、Qt中文参考文档(网上在线教程)、QTCN开发网和Qt入门视频
  4. 三星Samsung SCX-3206W 驱动
  5. 第二章:Django快速上手
  6. 2020大学生网络安全知识竞赛总决赛模拟卷易错题集(5)
  7. 永中Office与Ubuntu 11.04桌面的集成
  8. ArcMap加载天地图底图及出现空白问题解决方法
  9. 基于Ant Design和jQuery UI的表单设计器
  10. 设计模式系列-Builder模式(高效构建参数)