Python提取PDF表格及文本!(附源碼)


pdf是一種便攜式文檔格式,由Adobe公司設計。因為不受平台限制,且方便保存和傳輸,所以pdf非常受歡迎。

目前市場上有很多pdf工具,大部分是閱讀類,也有支持對pdf的修改、轉換等功能,但這部分工具不少是收費的。但是如果要批量對pdf修改的話還是用代碼實現會比較好!

這次介紹一個開源python工具庫-pdfplumber,可以方便地獲取pdf的各種信息,包括文本、表格、圖表、尺寸等。

pdfplumber在github上有英文官方文檔,后面我們會撿重點講解,先看下如何用pdfplumber提取pdf表格?

以NBA 2020-2021 常規賽數據作為范例,pdf表格如下:

 

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

# 導入pdfplumber import pdfplumber # 讀取pdf文件,保存為pdf實例 pdf = pdfplumber.open("E:\\nba.pdf") # 訪問第二頁 first_page = pdf.pages[1] # 自動讀取表格信息,返回列表 table = first_page.extract_table() table 

輸出:

 

第二步:整理成dataframe格式,保存為excel

import pandas as pd # 將列表轉為df table_df = pd.DataFrame(table_2[1:],columns=table_2[0]) # 保存excel table_df.to_excel('test.xlsx') table_df 

輸出:

 

 

一個小小的腳本,不到十行代碼,便將pdf表格提取並轉化為dataframe格式,最終保存到excel。

有個初步認知后,接下來詳細講講pdfplumber的安裝、導入、api接口等信息。

pdfplumber簡介

前面已經介紹過pdfplumber的用途,也用一個小案例展示了如何提取表格,我覺得對於pdfplumber只需要了解三點就可以。
1、它是一個純python第三方庫,適合python 3.x版本
2、它用來查看pdf各類信息,能有效提取文本、表格
3、它不支持修改或生成pdf,也不支持對pdf掃描件的處理

Github地址https://github.com/jsvine/pdfplumber

pdfplumber安裝和導入

同其他python庫一樣,pdfplumber支持使用pip安裝,在命令行輸入:

pip install pdfplumber

如果遇到安裝慢的問題,可以替換鏡像源,會快很多。

pdfplumber安裝后,用import導入即可使用:

import pdfplumber .... 

pdfplumber簡單使用

pdfplumber中有兩個基礎類,PDF和Page。看字面意思能猜出,前者是處理整個文檔,后者是處理頁面。

「pdfplumber.PDF類」

 

 

「pdfplumber.Page類」

這是pdfplumber的核心功能,對pdf的大部分操作都是基於這個類,包括提取文本、表格、尺寸等。

這里暫不一一列舉它的屬性和方法。

通過一個簡單的案例,就可以明白它們的作用。示例pdf文檔,共兩頁:

 

 

1.讀取pdf

# 導入pdfplumber import pdfplumber # 讀取pdf文件,返回pdfplumber.PDF類的實例 pdf = pdfplumber.open("e:\\nba2.pdf") 

2.獲取該pdf文檔的信息

# 通過pdfplumber.PDF類的metadata屬性獲取pdf信息 pdf.metadata 

輸出:

 

 

這些是pdf的基礎信息,包括作者、來源、日期等。
3.總頁數

# 通過pdfplumber.PDF類的metadata屬性獲取pdf頁數 len(pdf.pages) 

4.讀取第一頁的頁寬、頁高等信息

# 第一頁pdfplumber.Page實例 first_page = pdf.pages[0] # 查看頁碼 print('頁碼:',first_page.page_number) # 查看頁寬 print('頁寬:'first_page.width) # 查看頁高 print('頁高:'first_page.height) 

輸出:

 

 

5.讀取第一頁的文本

# 讀取文本 text = first_page.extract_text() print(text) 

輸出:

 

 

6.讀取第二頁的表格

import pandas as pd # 第二頁pdfplumber.Page實例 first_page = pdf.pages[1] # 自動讀取表格信息,返回列表 table = first_page.extract_tables() # 將列表轉為df table_df = pd.DataFrame(table_2[1:],columns=table_2[0]) table_df 

 

pdfplumber提取表格有很多的細節需要處理,這里給到的范例表格線框比較規范,所以能很簡單的提取,但對於線框不完全(包含無線框)的表格,其效果就差了不少。

在實際項目所需處理的pdf文檔中,線框完全及不完全的表格都比較多,為了能夠理解pdfplumber實現表格抽取的原理和方法,我們需要去細究相關參數的設置。

正如案例所示,pdfplumber.Page對象的.extract_table()方法可以提取表格,返回從頁面上最大的表中提取的文本,以列表列表的形式顯示,結構為row -> cell。

「表格抽取參數設置」

默認情況下,extract_table使用頁面的垂直和水平線(或矩形邊緣)作為單元格分隔符。該方法可以通過table_settings參數進行高度自定義。可能的設置及其默認值:

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

 

pdfplumber支持對圖表進行可視化調試,能輸出圖像,顯示如何提取表。

 

pdfplumber的獨特之處

python中有很多庫可以處理pdf,比如PyPDF2、pdfminer等,那pdfplumber的優勢在哪呢?

首先,pdfplumber能輕松訪問有關PDF對象的所有詳細信息,且用於提取文本和表格的方法高級可定制,使用者可根據表格的具體形式來調整參數。

最關鍵的是pdfplumber作者持續在維護該庫,而同樣受歡迎的PyPDF2已經不再維護了。
源碼:https://pan.baidu.com/s/1COX_JUYeNxwvaMe4NFy6AA 提取碼: q3a7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM