1,引言
晚上翻看《Python網路數據採集》這本書,看到讀取PDF內容的代碼,想起來前幾天集搜客剛剛發布了一個抓取網頁pdf內容的抓取規則,這個規則能夠把pdf內容當成html來做網頁抓取。神奇之處要歸功於Firefox解析PDF的能力,能夠把pdf格式轉換成html標簽,比如,div之類的標簽,從而用GooSeeker網頁抓取軟體像抓普通網頁一樣抓取結構化內容。
從而產生了一個問題:用Python爬蟲的話,能做到什麼程度。下面將講述一個實驗過程和源代碼。
2,把pdf轉換成文本的Python源代碼
下面的python源代碼,讀取pdf文件內容(互聯網上的或是本地的),轉換成文本,列印出來。這段代碼主要用了一個第三方庫PDFMiner3K把PDF讀成字元串,然後用StringIO轉換成文件對象。(源代碼下載地址參看文章末尾的GitHub源)
復制代碼
from urllib.request import urlopen
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open
def readPDF(pdfFile):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
process_pdf(rsrcmgr, device, pdfFile)
device.close()
content = retstr.getvalue()
retstr.close()
return content
pdfFile = urlopen("http://pythonscraping.com/pages/warandpeace/chapter1.pdf")
outputString = readPDF(pdfFile)
print(outputString)
pdfFile.close()
復制代碼
如果PDF文件在你的電腦里,那就把urlopen返回的對象pdfFile替換成普通的open()文件對象。
3,展望
這個實驗只是把pdf轉換成了文本,但是沒有像開頭所說的轉換成html標簽,那麼在Python編程環境下是否有這個能力,留待今後探索。
4,集搜客GooSeeker開源代碼下載源
1. GooSeeker開源Python網路爬蟲GitHub源
5,文檔修改歷史
2016-05-26:V2.0,增補文字說明
2016-05-29:V2.1,增加第六章:源代碼下載源,並更換github源的網址
Ⅱ python怎麼合並pdf
<
用下面的方法可以把多個pdf合並成一個PDF文件。
方法一:
1、運行Aaobe acrobat ,然後點擊「創建」—「合並文件到單個PDF」,或者點擊「 創建」右側的「合並」—「合並文件到單個PDF」。
2、彈出「合並文件」的界面,點擊「添加文件」—選擇「添加文件」/「添加文件夾」/「重新使用文件」來進行添加要合並的PDF文件。
3、彈出「添加文件」的界面,選擇好要合並的PDF文件後,點擊「添加文件」,完成要合並pdf文件的添加。
4、看到文件已添加完成,如果要調整合並文件的順序,可以選中該文件然後用左下角的「向上」、「向下」按鍵來進行順序的調整,調整完畢後點擊右下角的「合並文件」按鍵。如果只想合並已添加單個pdf文件中的某幾個頁面可以通過「選擇頁面」選取想要添加的頁面。
5、合並完成以後,會直接打開合並好的文件,名字一般為「組合1」,並自動彈出「另存為」窗口,根據需要變更文件點擊保存即可把合並好的文件保存下來。
方法二:
運行PDF Binder,彈出PDF合並器功能界面,點擊「添加文件」,添加要合並的PDF文件。
在打開界面選擇好要合並的PDF文件後,點擊「打開」,完成要合並pdf文件的添加。
下圖可以看到文件已添加完成,如果要調整合並文件的順序,可以選中該文件然後用功能區的「向上」、「向下」按鍵來進行順序的調整,調整完畢後點擊「合並!」按鍵。
在彈出的「另存為」界面輸入文件名,點擊保存完成文件合並,打開文檔可以看到文檔已合並成功。
方法三,其他如Ap PDF Split-Merge等軟體合並文件。
Ⅲ Python利器:如何處理PDF表格數據
大家好,我是Peter~
在很多情況下,我們都需要處理PDF格式的文件。尤其當我們遇到PDF表格數據需要進行提取,真的是一個令人頭疼的問題。
因為PDF文件不能像Word那樣直接復制,即使復制了再黏貼也可能會出現格式排版錯亂甚至亂碼問題。如何從一個PDF文件提取出表格數據?本文提供兩個解決方案:
首先提供的一種方法是從文字 PDF 中提取表格信息的工具:Camelot,它能夠直接將大部分表格轉換為 Pandas 的 Dataframe。
更多的詳細信息,請參考項目地址: https://github.com/camelot-dev/camelot
camelot的安裝有多種方式。如果有報錯,網上一般有解決方式:
1、通過conda安裝
2、使用pip進行安裝
3、通過GitHub進行安裝
首先將項目復制到本地:
然後進入文件中進行安裝:
下面通過一個案例來講解如何使用camelot。假設我們現在有一個只有一頁的PDF文件test.pdf:
1、先讀取文件
導出成csv格式的數據(方式1)
查看tables的相關信息:
導出方式2:
將數據轉換成DataFrame:
tabula的功能比camelot更加強大,可以同時對多個表格數據進行提取。項目的具體地址請參考: https://github.com/chezou/tabula-py
tabula的安裝是非常簡單的:
安裝之後檢驗這個庫是否安裝成功:
通過tabula這個庫來讀取PDF文件:
然後我們發現列表中唯一的一個元素就是dataframe:
將讀取到的數據輸出成CSV格式的文件:
上面讀取的PDF文件是比較簡單的,只有一頁,而且剛好是一個很標準的表格形式的數據,下面看一個比較復雜的例子:
下面是第一頁,第一列可以看成是索引:
在第二頁中有兩份表格,而且中間有很多的空白行:
第三頁的數據比較標准:
這3頁是在同一個PDF文件中,這3頁是在同一個PDF文件中,這3頁是在同一個PDF文件中
上面的紅色提示中我們看到:當沒有指定pages參數的時候,只會默認讀取第一頁的數據,所以列表的長度為1。
轉成dataframe後將原來的索引變成新的一列 (部分數據)
通過pages來讀取全部數據:
通過指定pages="all":
同時獲取兩個表格的數據:
通過area參數來指定:
刪除在讀取的表格中我們不需要的欄位信息
可以將得到的數據輸出成不同格式的文件,以json格式為例:
我們可以看到
Ⅳ python怎麼轉成pdf
方法一:使用虛擬列印機pdf factory即可,而且其他格式文件只要是能夠列印,選擇這個虛擬列印機,都可以做成PDF文件,很簡單實用;
方法二:用其他虛擬列印機轉成PDF文件。
方法三:使用專門的轉換軟體,把文件轉成PDF文件。
Ⅳ python怎樣讀取pdf文件的內容
fromurllib.requestimporturlopen
frompdfminer.,process_pdf
frompdfminer.converterimportTextConverter
frompdfminer.layoutimportLAParams
fromioimportStringIO
fromioimportopen
defreadPDF(pdfFile):
rsrcmgr=PDFResourceManager()
retstr=StringIO()
laparams=LAParams()
device=TextConverter(rsrcmgr,retstr,laparams=laparams)
process_pdf(rsrcmgr,device,pdfFile)
device.close()
content=retstr.getvalue()
retstr.close()
returncontent
pdfFile=urlopen("chapter1.pdf")
outputString=readPDF(pdfFile)
print(outputString)
pdfFile.close()
Ⅵ Python 操作PDF庫介紹之PDFMiner
Python 操作PDF庫介紹之PDFMiner
PDFMiner是一種從PDF文檔中提取信息的工具。與其他PDF相關工具不同,它完全專注於獲取和分析文本數據。
PDFMiner允許人們獲取頁面中文本的確切位置,以及字體或線條等其他信息。
它包括一個PDF轉換器,可以將PDF文件轉換為其他文本格式(如HTML)。它具有可擴展的PDF解析器,可用於除文本分析之外的其他目的。
github:
https://github.com/euske/pdfminer/