今天遇到一個批量讀取pdf文件中表格數據的需求,樣式大致是如下這樣:
html
python讀取PDF無非就是三種方式(我所瞭解的),pdfminer
、pdf2htmlEX
和 Tabula
。綜合考慮後,選擇了最後一種。下面對三種方式分別介紹:java
該方式從網上搜索的結果是,能夠提取pdf文本數據,可是提取後表格信息就亂了。因此本人沒有親自實驗,就果斷放棄了實驗該方法。若是隻是提取pdf裏面的文本內容,該方式多是比較合適的。python
該方式是經過把pdf格式轉換成html格式,而後再提取信息的方法。
Github: https://github.com/coolwanglu/pdf2htmlEX
需先下載pdf2htmlEX可執行程序,下載地址:https://github.com/coolwanglu/pdf2htmlEX/wiki/Download。git
#-*- conding: utf-8 -*- import subprocess subprocess.call('"D:\Program Files (x86)\pdf2htmlEX-win32-0.14.6-upx-with-poppler-data\pdf2htmlEX.exe" --dest-dir E:\\test\extract\\2017gq\\out E:\\test\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf', shell=True)
執行以上代碼,會在指定目錄 E:\test\extract\2017gq\out 下生成對應html文件,瀏覽器中查看效果:
github
能夠看到總體轉換的效果很是不錯,可是轉換後的標籤沒有特色,使數據的提取變得很是困難。多番嘗試後,感受該方法不夠通用,無法解決個人需求。也許對於單純的pdf轉html,該方式多是最好的選擇。shell
Tabula是專門用來提取PDF表格數據的,同時支持PDF導出爲CSV、Excel格式。
官網: http://tabula.technology/
Github: https://github.com/chezou/tabula-py
首先安裝tabula-py: pip install tabula-py
tabula-py依賴庫包括java、pandas、numpy,因此需保證運行環境中安裝了這些庫。瀏覽器
#-*- conding: utf-8 -*- import tabula df = tabula.read_pdf("E:\\test\\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf", encoding='gbk', pages='all') print(df) for indexs in df.index: # 遍歷打印企業名稱 print(df.loc[indexs].values[1].strip())
執行以上代碼,成功打印出表格中的全部企業名稱,查看打印的 df 的結構,以下圖:
code
以上三種方式中,最後一種方式完美的解決了個人從PDF表格中提取數據的需求,但願能拋磚引玉,你們在使用時選擇最適合本身的方法,若有介紹不當之處,望留言中指正,謝過。htm