2012-04-03 31 views
0

我正在幫助某人從網站上抽取一堆(數以萬計)的pdf文件。我們有文件名的模式,但並不是所有的文件都存在。我認爲要求一個不存在的文件是不禮貌的,特別是在這個範圍內。我使用Python和我的urllib2的測試中,我發現,這個片段讓我的文件,如果存在的話如何以編程方式告訴我所要求的文件名是否存在於網絡服務器上?

s=urllib.urlretrieve('http://website/directory/filename.pdf','c:\\destination.pdf') 

如果該文件不存在,我得到了我指定的名稱,但文本文件從他們的404頁面。現在我可以在完成後處理這個問題(讀取文件並刪除所有404頁面),但這對他們的服務器來說看起來不是很好,也不是pythonic。

我嘗試着在urllib和urlretrieve中查看各種函數,並且沒有看到任何告訴我該文件是否存在。

+12

什麼是粗魯拉動數以萬計的PDF文件。一些不存在的文件的一些額外的粗魯...呃。沒關係,在旁邊。 – cHao 2012-04-03 18:59:34

+0

嗯,我們打算在交通癱瘓的時候(週末)做這件事,他們沒有限制這些文件在那裏閱讀,但是爲了他的研究,我們需要收集大量的文件 – PyNEwbie 2012-04-03 19:01:21

+0

這實際上是非常pythonic - 寬恕的_ask ,而不是權限 - pythonic(並且只有在給定網絡工作方式的情況下)才能做到404s。我還想指出,它們不是文件名,它們是URL--有區別,URL並不意味着服務器上有實際的文件 - 它們可以從數據庫或其他任何文件生成。 – 2012-04-03 19:01:29

回答

6

您可以檢查響應的返回碼。對於現有的PDF將爲200,對於不存在的PDF將爲404。您可以使用requests庫來使這更容易:

>>> import requests 
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.png') 
>>> r.status_code 
200 
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.xxx') 
>>> r.status_code 
404 
+0

感謝您的幫助 – PyNEwbie 2012-04-03 19:32:47

+0

如果您無法安裝請求,該怎麼辦? – 2014-04-28 22:36:52

+0

@BenL然後哭:(內置庫 - urllib/httplib - **可怕** – jterrace 2014-04-29 04:45:32

相關問題