2014-02-18 22 views
0

我的目標是有一個python腳本,將訪問特定的網頁,提取每個頁面上的文件中具有特定詞的所有pdf文件,將它們轉換爲html/xml,然後瀏覽html文件以從pdf表格中讀取數據。蟒蛇 - 從網頁拉PDF和轉換爲HTML

到目前爲止,我已導入mechanize(用於瀏覽頁面/查找pdf文件),並且我有pdfminer,但是我不確定如何在腳本中使用它來執行它在命令行上執行的相同功能。

什麼是完成我的任務最有效的一組庫,你會如何建議接近每一步?我很抱歉,如果這是針對stackoverflow太具體,但我有麻煩使用谷歌搜索和稀疏的文件拼湊在一起如何編碼。謝謝!


編輯: 所以我決定在這一個去與Scrapy。我真的很喜歡它,但現在我有一個新的問題。我已經定義了一個PDFItem()類,用於帶有字段標題和url的蜘蛛。我有一個選擇器,它可以抓取我想要的所有鏈接,並且我想通過這些鏈接爲每個鏈接創建一個PDFItem。下面是我有下面的代碼:

links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]') 
item = PDFItem() 
for link in links: 
     item['title'] = link.xpath('/text()') 
     item['url'] = URL + link.xpath('@href').extract()[0] 

URL行的效果很好,但我真的不知道如何爲標題做相同的。我想我可以在頂部執行查詢,但在選擇器的末尾添加'/ text()',但這看起來過多。是否有更好的方法來瀏覽鏈接數組中的每個鏈接對象並獲取文本和href值?

回答

1

我會用Scrapy。 Scrapy是抓取整個網站並生成所有PDF鏈接列表的最佳工具。像這樣的蜘蛛會很容易寫。你絕對不需要機械化。

之後,我會使用Poppler將每個PDF轉換爲HTML。它不是Python模塊,但可以使用命令pdftohtml。根據我的經驗,我用Poppler比PDFMiner獲得了更好的結果。

編輯:

links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]') 
for link in links: 
    item = PDFItem() 
    item['title'] = link.xpath('text()').extract()[0] 
    item['url'] = URL + link.xpath('@href').extract()[0] 
+0

所以我決定用Scrapy但現在我有一個新的問題。請查看我上面的編輯 – maniciam

+0

請參閱編輯我的回答 – nathancahill

+0

您發佈錯誤的代碼:列表索引超出範圍 – maniciam

0

爲了從網頁瀏覽和查找PDF鏈接,URL庫應該足夠了。根據文檔建議,Mechanize用於自動與網站進行交互。鑑於你的描述,我覺得沒有必要。

PDFMinerpdf2txt.py將PDF轉換爲HTML。所以你需要在腳本中調用這個程序作爲子過程來創建輸出HTML。

因此,您需要的庫是一個HTTP庫,如Requests和PDFMiner。

腳本的工作流程是這樣的:使用Requests PDF文件保存爲本地文件,here

import os 
import requests 
from subprocess import Popen 

... 
r = requests.get(<url-which-has-pdf-links>) 
# Do a search for pdf links in r.text 
... 
for pdf_url in pdf_links: 
    # get the PDF content and save it to a local temp file 
... 
# Build the command line parameters, the way pdf2txt expects 
# Invoke the PDFMiner's pdf2txt on the created file as a subprocess 
Popen(cmd) 

更多信息。更多關於子程序運行程序的信息here