查看原文
其他

Camelot:从PDF中提取表格数据

爬虫俱乐部 Stata and Python数据分析 2023-02-21

本文作者:冀思慧,中南财经政法大学金融学院

本文编辑:刘光中

技术总编:王玉婷

Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

引言
在实际研究中,我们常需要获取大量数据,并且大部分的公开数据是以pdf表格的形式呈现出来的,手工录数工作量巨大且容易出错。为了帮助大家解决这个问题,我们之前的推文就已经使用pdfplumber来提取表格,今天我们一起来学习另一个pdf表格识别库——Camelot一、Camelot介绍Camelot可以很轻松的从PDF文件中提取表格数据。与其他同类库相比,Camelot存在一些这样的优点:可以调整设置项来精确控制数据的提取过程;不必手动检查,根据空白和精度指标来判断坏的表格并丢弃;可以把数据导出为各种不同的格式比如CSV、JSON、EXCEL、HTML。 Camelot有两种表格解析方法。一种是流解析(stream),stream可用于解析在单元格之间具有空格的表,以模拟表结构,它建立在PDFMiner的功能之上,即使用边距将页面上的字符分组为单词和句子。另一种是格子解析(lattice),格子本质上更具有确定性,并且它不依赖于猜测,它可用于解析在单元格之间划分了行的表,并且它可以自动解析页面上存在的多个表;它首先使用ghostscript将PDF页面转换为图像,然后通过使用OpenCV应用一组形态变换来处理它以获得水平和垂直线段。格子解析能够保留表格完整的样式,对于复杂表格来说要优于流解析模式。同时,Camelot默认使用格子解析(lattice),因此我们着重介绍格子解析。首先,我们需要安装ghostscript,如果只安装的camelot,运行时通常会报错。二、Camelot的使用

1.安装

在使用Camelot之前,我们需要对其进行安装,在命令行输入:
pip install camelot-py[cv]

2.检测表格

为进行演示,我们创建一个pdf格式的文件,第2页为表格,如下图所示:

导入camelot库,读取上述文件

import camelottables = camelot.read_pdf('G:\pdfex.pdf')tables

观察代码运行结果,发现没有表格存在,这是因为默认情况下,Camelot仅使用PDF的第一页来提取表,但我们的文件第2页为表格,我们设置pages参数来指定读取文件第2页:
import camelottables = camelot.read_pdf('G:\pdfex.pdf',pages='2') tables

结果表明,第2页存在1个表格。pages参数接受页面页码是逗号分隔的字符串,还可以指定页面范围 ,例如:pages="1,4-10,20-30"pages="1,4-10,20-end"

3. 查看表的形状

我们也可以使用索引访问每个表。从上面的代码片段中,我们可以看到该tables对象只有一个表,因为n=1。让我们使用索引访问该表0并查看它shape,结果表明该表格为5行5列。

tables[0]

4.打印解析报告

print(tables[0].parsing_report) 

从解析的参数可以得出,其准确性是很好的,这意味着表格很有可能被正确提取。
5.打印出提取表格中的内容 
tables[0].df

6.导出表格中的内容

可以使用to_csv()方法将表导出为CSV文件,或者可以使用to_json()导出为JSON格式,还可以将其导出为Excel,HTML文件格式。

tables[0].to_excel('G:\班级成绩.xls')   ##括号内为路径及文件名称

今天的内容就介绍到这里啦,希望对大家有所帮助~

(END)重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!



往期推文推荐      Stata之计算财务指标——融资约束

      列表生成式|让你的代码更简洁

Stata绘图系列——玩转绘图通用选项之坐标轴

       玩转地图的好帮手--pyecharts

       爬虫俱乐部又又又输送了一位研究助理!!!      【数据分析】一文教你玩转DataFrame

 震惊,爬虫俱乐部竟是这样运营答疑群的?!

【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

带你玩转Stata编码一言不合就teamviewer

【基础篇】循环语句的continue与break

        教你用Stata爬取全国疫情风险地区数据,原来这么简单!【数据结构】集合的使用方法      Stata爬取七普人口数据

       浅析Python的序列化与反序列化

     爬虫俱乐部的精彩答疑--爬虫为何失败?

       利用Stata批量制作学生证     【数据分析-入门】科学计算基本库—Numpy的简单使用      Stata绘图系列——玩转绘图通用选项之图例     【基础篇】数据类型介绍——list、tuple和range对象

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存