1

我使用 Pdfplumber 提取第 2 页第 3 节(通常)的表格。但它只适用于某些 pdf,其他不适用。对于失败的 pdf 文件,似乎 Pdfplumber 读取了按钮表而不是我想要的表。

我怎样才能拿到桌子?不起作用的pdf链接: pdfA

有效的pdf链接: pdfB

这是我的代码:

import pdfplumber
pdf = pdfplumber.open("/Users/chueckingmok/Desktop/selenium/Shell Omala 68.pdf")
page = pdf.pages[1]
table=page.extract_table()

import pandas as pd
df = pd.DataFrame(table[1:], columns=table[0])
df

结果是 在此处输入图像描述

但是我在第 2 页中想要的表格是 在此处输入图像描述

但是,此代码适用于 pdfB(我在上面提到过)。

顺便说一句,我在每个 pdf 中想要的表格在第 3 节中。

任何人都可以帮忙吗?

非常感谢琼

更新: 我刚刚找到了一个很好的包来提取 pdf 文件,没有任何问题。包是 fitz,它也被命名为 PyMuPDF。

4

2 回答 2

5

嘿这是该问题的正确解决方案,但首先请阅读以下我的一些观点

  • 好吧,您使用 pdfplumber 进行表格提取,但我认为您应该阅读有关表格设置的信息,当您根据需要阅读表格时,表格的设置有很多,您肯定会从那里找到答案。PdfPlumber API - 用于表提取在这里
  • 到目前为止,我在下面为您的问题提供了完美的解决方案,但首先正确检查 pdfplumber API 的文档,您肯定可以从那里找到所有答案,而且我相信将来您不需要询问有关使用表格提取的问题pdfplumber,因为您肯定会从那里找到有关表格提取以及文本提取、单词提取等其他内容的所有解决方案。
  • 为了更好地理解表设置,您还可以使用可视化调试,这是 pdfplumber 的最佳功能,用于了解表设置对表的确切作用以及如何使用表设置提取表。表的可视化调试

以下是您问题的解决方案,

import pandas as pd
import pdfplumber 
pdf = pdfplumber.open("GSAP_msds_01259319.pdf")
p1 = pdf.pages[1]
table = p1.extract_table(table_settings={"vertical_strategy": "lines", 
                                         "horizontal_strategy": "text", 
                                         "snap_tolerance": 4,})
df = pd.DataFrame(table[1:], columns=table[0])
df

查看上述代码的输出

于 2020-07-28T12:13:28.820 回答
0

要从同一页面中提取两个表,我使用以下代码:

import pdfplumber

with pdfplumber.open("file.pdf") as pdf:
    first_page = pdf.pages[0].find_tables()
    t1_content = first_page[0].extract(x_tolerance = 5)
    t2_content = first_page[1].extract(x_tolerance = 5)
    print(t1_content, '\n' ,t2_content)
于 2021-09-11T13:12:14.093 回答