當前位置:吉日网官网 - 傳統節日 - Python如何從PDF文件中抓取表格數據(代碼示例)

Python如何從PDF文件中抓取表格數據(代碼示例)

本文給大家帶來的是關於Python如何從PDF文件中抓取表格數據(代碼示例),有壹定的參考價值。有需要的朋友可以參考壹下,希望對妳有幫助。

本文將展示壹種略有不同的爬行動物。

以前我們的爬蟲從互聯網上抓取數據,因為網頁壹般都是用HTML,CSS,JavaScript代碼編寫的。因此,有很多成熟的技術來抓取網頁中的各種數據。這壹次,我們需要抓取的文檔是壹個PDF文件。本文將展示如何使用Python的camelot模塊從PDF文件中抓取表格數據。

在我們的日常生活和工作中,PDF文件無疑是最常用的文件格式之壹,小到教材、課件,大到合同、策劃書。然而,如何從PDF文件中提取表格是壹個大問題。因為PDF中沒有內部表示來表示表格。這使得提取用於分析的表格數據變得困難。那麽,我們如何從PDF中抓取表格數據呢?

答案是Python的卡梅洛特模塊!

Camelot是Python的壹個模塊,它使任何人都可以輕松地從PDF文件中提取表格數據。您可以使用以下命令安裝camelot模塊(這需要很長時間):

pip安裝camelot-pycamelot模塊的官方文檔地址為:https://camelot-py.readthedoc...

下面將展示如何使用camelot模塊從PDF文件中抓取表格數據。

例1首先我們來看壹個簡單的例子:eg.pdf,整個文檔只有壹頁,而這壹頁只有壹個表格,如下:

使用以下Python代碼提取PDF文件中的表格:

進口卡米洛特

#從PDF文件中提取表格

tables = Camelot . read _ pdf(' E://eg . pdf ',pages='1 ',flavor='stream ')

#表格信息

打印(表格)

打印(表格[0])

#表格數據

打印的輸出結果(表[0])。數據)是:

& lttable list n = 1 & gt;

& lt表格形狀=(4,4)>

[['ID ',' name ',' city ',' gender'],['1 ',' Alex ',' Shanghai ',' m'],['2 ',' Bob ',' Beijing ',' f'],['f] Camelot.read_PDF()是Camelot從表中提取數據的函數。輸入參數是PDF文件的路徑、頁面和表格解析方法(有兩種方法:stream和lattice)。對於表格解析方法,默認的方法是lattice,而stream方法默認會將整個PDF頁面解析為表格。如果需要在解析頁面中指定區域,可以使用參數table_area。

Camelot模塊的方便之處還在於它提供了將提取的表格數據直接轉換成pandas、csv、JSON和html的函數,比如tables[0]。df,表[0]。to_csv()函數。讓我們以輸出csv文件為例:

進口卡米洛特

#從PDF文件中提取表格

tables = Camelot . read _ pdf(' E://eg . pdf ',pages='1 ',flavor='stream ')

#將表格數據轉換為csv文件

從表[0]中獲取的csv文件。to_csv('E://eg.csv ')如下:

例2例2中,我們將提取PDF頁面中某個區域的表格數據。PDF文件的頁面(部分)如下:

為了提取整個頁面中唯壹的表,我們需要定位該表。PDF文件的坐標系不同於圖片的坐標系。它以左下角的頂點為原點,X軸向右,Y軸向上。可以通過下面的Python代碼輸出整個頁面的坐標:

進口卡米洛特

#從PDF中選擇壹個表格

tables = Camelot . read _ pdf(' G://Statistics-Fundamentals-essentially . pdf ',pages='53 ',

flavor='stream ')

#畫出PDF文檔的坐標並定位表格。

表[0]的輸出。情節('文本')是:

用戶警告:第-53頁找不到表格[stream.py: 292]整個代碼中找不到表格,因為stream方法中默認將整個PDF頁面視為表格,所以找不到表格。但是繪制的圖像頁面坐標如下:

仔細對比之前的PDF頁面,我們不難發現,表格對應區域的坐標是左上角的(50,620),右下角的(500,540)。我們將table_area參數添加到read_pdf()函數中。完整的Python代碼如下:

進口卡米洛特

#識別指定區域中的表格數據

tables = Camelot . read _ pdf(' G://Statistics-Fundamentals-essentially . pdf ',pages='53 ',

flavor='stream ',table_area=['50,620,500,540'])

#畫出PDF文檔的坐標並定位表格。

table_df = tables[0]。df

打印(類型(table_df))

print(table_df.head(n=6))輸出的結果是:

& ltclass ' pandas . core . frame . data frame ' & gt;

0 1 2 3

0學生測試前分數測試後分數差異

1 1 70 73 3

2 2 64 65 1

3 3 69 63 -6

5 34 82 88 6摘要在PDF頁面中識別表格時,除了指定區域的參數外,還有下標、單元格合並等參數。詳細用法請參考卡梅洛特官網:https://camelot-py.readthedoc...

  • 上一篇:土家族有什麽民族傳統麽?
  • 下一篇:大屏幕投影設備
  • copyright 2024吉日网官网