如何利用Python抓取PDF中的某些內容?

我現在有大約2000份公司的年報(英文),想從每份中抓取固定的內容(比如說TOTAL ASSET)。如果手動搜索然後複製粘貼進EXCEL太費事了。有沒有什麼辦法能自動化這個過程。 這些年報是PDF格式的


你的問題事實上包含幾部分:

  • 將 PDF 轉化為純文本格式
  • 抽取其中部分內容
  • 格式化寫入到 excel 中

轉換 PDF 有很多庫可以完成,如下是通過 pdfminer 的示例:

from cStringIO import StringIO

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

def convert_pdf_2_text(path):

rsrcmgr = PDFResourceManager()
retstr = StringIO()

device = TextConverter(rsrcmgr, retstr, codec="utf-8", laparams=LAParams())
interpreter = PDFPageInterpreter(rsrcmgr, device)

with open(path, "rb") as fp:
for page in PDFPage.get_pages(fp, set()):
interpreter.process_page(page)
text = retstr.getvalue()

device.close()
retstr.close()

return text

需要指出的是,pdfminer 不但可以將 PDF 轉換為 text 文本,還可以轉換為 HTML 等帶有標籤的文本。上面只是最簡單的示例,如果每頁有很獨特的標誌,你還可以按頁單獨處理。


方法很多,比如之前提到的pypdf。然而用起來其實稍顯麻煩,很多操作不夠方便。

所以我一般用pdf2htmlex(github上有,一個國人項目,非python)先把pdf轉html,接下來再用bs4來解析處理。好處是處理html的工具非常非常豐富,且pdf2htmlex對原頁面的效果保持得特別好,特別是對於那些個用word和latex導出的pdf里,大量數據圖表裡的標籤可以很方便地把值抓出來……


pdfminer 對表格不友好,推薦使用pdf2htmlex。


用pyPdf http://pybrary.net/pyPdf/

教程的話谷歌百度一下一大堆 = =


推薦閱讀:

pandas 怎麼根據一列的數據的值的情況判斷來生成另外一列的數值?
如何批量獲取年報中數據?
Python的大數運算到底是根據什麼基礎原理或者演算法實現的?
將來 UWP 會不會支持 python?
哪些簡單的linux或者python技能,能直接用在生活上讓周圍人刮目相看?

TAG:Python | 編程 | 上市公司 | PDF |