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

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

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

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

答案是Python的camelot模块!

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

pip install camelot-py

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

下面将展示如何利用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)

输出结果为:

分析代码,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('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官方文档网址:https://camelot-py.readthedoc…。

阅读全文

0 个人已赞赞一个收藏 (0)打赏

您入群打赏务必备注QQ号

支付宝扫一扫赞助

微信钱包扫描赞助

分享到:

生成海报

评论 抢沙发

评论前必须登录!

python抓取表格数据_Python如何实现从PDF文件中爬取表格数据(代码示例)相关推荐

  1. python爬取酒店信息_Python 爬虫练手项目—酒店信息爬取

    from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...

  2. python发短信 金山_Python爬虫基础练习(四) 金山翻译爬取(进阶篇)

    上一篇文章金山翻译爬取(基础篇)讲到爬取金山翻译,并且实现了简单词汇的爬取,但是我们的报错信息都是一长串字符,就像这样 当然这个报错还是很容易看懂的,"列表索引超出范围",但是我们 ...

  3. 爬虫python爬取页面请求_Python网络爬虫第三弹《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  4. python爬历年大学生就业数据_Python就业行情和前景分析之一爬取数据

    Python就业行情和前景分析之一爬取数据 http://zzdxb.baikezh.com/ 最近Python大热,就想要分析一下相关的市场需求,看一下Python到底集中在哪些城市,企业对Pyth ...

  5. 利用python爬取豆瓣音乐_Python爬虫小白入门(七)爬取豆瓣音乐top250

    抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比python自 ...

  6. (连载1.1)从招股说明书pdf文件中批量提取财务报表数据

    目录标题 背景说明 阅读代码时注意点 源代码 背景说明 本文选取的是当前日期上交所科创板所有的上市公司样本. 用八爪鱼从上交所公告页面爬取公告下载链接,使用迅雷批量下载. 阅读代码时注意点 流程思路: ...

  7. python爬取论坛帖子_Python爬虫实战(1):爬取Drupal论坛帖子列表

    1,引言 在<Python即时网络爬虫项目: 内容提取器的定义>一文我们定义了一个通用的python网络爬虫类,期望通过这个项目节省程序员一半以上的时间.本文将用一个实例讲解怎样使用这个爬 ...

  8. python网页爬虫循环获取_Python 爬虫第三篇(循环爬取多个网页)

    本篇是 python 爬虫的第三篇,在前面两篇 Python 爬虫第一篇(urllib+regex) 和 Python 爬虫第二篇(urllib+BeautifulSoup) 中介绍了如何获取给定网址 ...

  9. gnuradio上怎么使用python文件_使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

最新文章

  1. Lora模块项目01:简述物联网的各大无线通信技术
  2. YOLOV5 的小目标检测网络结构优化方法汇总(附代码)
  3. 绘制三维散点图_质量工具--之散点图
  4. C++中extern “C”含义深层探索(zz)
  5. POJ 1187 陨石的秘密 (线性DP)
  6. java中string和int的相互转换
  7. 同行压力(兼谈敏捷团队,绩效管理,自组织团队)
  8. java t800,T800KPI绩效考核系统C#源码
  9. 2022道路运输企业安全生产管理人员考试练习题及在线模拟考试
  10. 三菱工控板底层源码_三菱PLC实例代码开源PLC项目源代码参考程序百度云资源下载...
  11. 小和尚打水问题_操作系统进程同步问题解析(哲学家问题、生产消费问题、小和尚打水问题等大量例子)...
  12. 阿里云MaxComputer SQL学习之内置函数
  13. Android有效解决加载大图片时内存溢出的问题
  14. html中不写form的后果,html之form
  15. Windows获取本机公网ip脚本
  16. 睿智的目标检测31——非极大抑制NMS与Soft-NMS
  17. 加速人生来帮忙,系统顺畅又洁净!
  18. 软件需求规格说明书和系统需求规格说明书的区别
  19. android一些入门基础信息了解(2015年5月18日)
  20. datastage 函数_DataStage常用函数大全.doc

热门文章

  1. 计算机系统导论实验教程第二版,清华大学出版社-图书详情-《大学计算机基础实验教程(第2版)》...
  2. 尚学堂Java第五章所有题目
  3. c语言快速复数的比较大小,c语言中的复数操作
  4. 百余门店闭门谢客,韩妆如何败给了国潮?
  5. oracle 自动填充,jQuery 实现自动填充邮箱功能(带下拉提示)
  6. centos7 nuxeo platform 集成 onlyoffice,搭建企业级内容管理系统
  7. linux命令——帮助相关命令
  8. 苹果怎么截图?教你各种iPhone机型截屏方法
  9. Flutter侧边栏控件-SideBar
  10. 文献阅读笔记LUCC