excel抓取多页网页数据(一个表格如下:使用pdfplumber提取pdf表格文本输出:第二步)

优采云 发布时间: 2021-11-03 17:19

  excel抓取多页网页数据(一个表格如下:使用pdfplumber提取pdf表格文本输出:第二步)

  pdf 是一种*敏*感*词*文档格式,由 . 由于不受平台限制,保存和传输方便,所以pdf很受欢迎。

  目前市面上的pdf工具很多,大部分是阅读,还有一些支持pdf修改、转换等功能,但是这些工具很多都是收费的。

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

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

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

  

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

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

  输出:

  

  步骤2:整理成数据框格式并另存为excel

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

  输出:

  

  一个小脚本,不到十行代码,把pdf表格提取出来转换成dataframe格式,最后保存成excel。

  有了初步的了解之后,我们来详细说一下pdfplumber的安装、导入、api接口等信息。

  pdfplumber简介

  pdfplumber的使用我已经介绍过了,我也用一个小案例来展示如何提取表格。我认为pdfplumber只需要理解三点。

  1、是纯python第三方库,适用于python 3.x版本

  2、 用于查看各类pdf信息,可以有效提取文本和表格

  3、 不支持修改或生成pdf,也不支持扫描pdf的处理

  Github地址

  pdfplumber安装导入

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

  pip install pdfplumber<br data-filtered="filtered">

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

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

  import pdfplumber<br data-filtered="filtered">....<br data-filtered="filtered">

  pdfplumber 使用简单

  pdfplumber 中有两个基本类,PDF 和 Page。从字面意思可以猜到,前者是对整个文档进行处理,后者是对页面进行处理。

  “Pdfplumber.PDF 类”

  属性描述

  .元数据

  获取pdf基本信息,返回字典

  .pages

  pdfplumber.Page 的实例列表,每个实例代表pdf每一页的信息。

  “Pdfplumber.Page 类”

  这是pdfplumber的核心功能。pdf上的大部分操作都是基于这个类,包括提取文本、表格、维度等。

  它的属性和方法这里就不一一列举了。

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

  

  阅读pdf

  # 导入pdfplumber<br data-filtered="filtered">import pdfplumber<br data-filtered="filtered"><br data-filtered="filtered"># 读取pdf文件,返回pdfplumber.PDF类的实例<br data-filtered="filtered">pdf = pdfplumber.open("e:\\nba2.pdf")<br data-filtered="filtered">

  获取pdf文档的信息

  # 通过pdfplumber.PDF类的metadata属性获取pdf信息<br data-filtered="filtered">pdf.metadata<br data-filtered="filtered">

  输出:

  

  这些是pdf的基本信息,包括作者、出处、日期等。

  总页数

  # 通过pdfplumber.PDF类的metadata属性获取pdf页数<br data-filtered="filtered">len(pdf.pages)<br data-filtered="filtered">

  读取第一页的页宽、页高等信息

  输出:

  

  阅读第一页的文字

  # 读取文本<br data-filtered="filtered">text = first_page.extract_text()<br data-filtered="filtered">print(text)<br data-filtered="filtered">

  输出:

  

  阅读第二页上的表格

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

  

  pdfplumber 在提取表格时有很多细节需要处理。这里给出的示例表的线框图比较标准,所以很容易提取出来,但是对于线框图不完整的表(包括无线盒子),效果就差很多了。

  在实际项目中需要处理的pdf文档中,有很多线框图完整和不完整的表格。为了理解pdfplumber实现表单抽取的原理和方法,我们需要仔细研究相关参数的设置。

  如案例所示,pdfplumber.Page对象的.extract_table()方法可以提取表格,返回从页面最大表格中提取的文本,并以结构行-&gt;单元格的列表形式显示.

  《表提取参数设置》

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

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

  

  pdfplumber 支持图表的可视化调试,可以输出图像,并展示如何提取表格。

  

  pdfplumber的独特之处

  python中有很多可以处理pdf的库,比如PyPDF2、pdfminer等,pdfplumber有什么优点呢?

  首先,pdfplumber可以方便的访问PDF对象的所有详细信息,提取文本和表格的方法是高度可定制的,用户可以根据表格的具体形式调整参数。

  最重要的是pdfplumber作者继续维护库,同样流行的PyPDF2不再维护。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线