2012-05-26 73 views
0

我正在尋找一種快速的方式從url獲取http響應代碼。如果代碼是200',則下載圖像。我可以使用MyOpener獲得響應代碼嗎? tahnks從FanycURLLoader獲得響應代碼

from urllib import FancyURLopener 
class MyOpener(FancyURLopener): 
    version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' 


myopener = MyOpener() 
myopener.retrieve('http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg', 'Zindagi1976.jpg') 

UPDATE:

>>> import urllib 
>>> resp = urllib.urlopen("http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg") 
>>> print resp.getcode() 
403 

回答

0

有什麼不對的還是我把你的問題是錯誤的。

>>> import urllib 
>>> resp = urllib.urlopen("http://docs.python.org/library/urllib.html") 
>>> if resp.getcode() == 200: 
...  print "do my stuff" 
... 
do my stuff 
>>> 

很高興你已經解決了這個問題。有一個原因,wikimedia給出403作爲響應代碼。原因是,只要您發送訪問維基媒體內容的請求,就會意識到該請求不會由browser發送,因此會引發403錯誤。

網站做了這種類型的檢查,以確保內容不被機器人訪問。還有很多其他的檢查,User-Agent就是其中之一。

因此,使它像一個瀏覽器發送請求,您可以將User-Agent添加到您的Python代碼。

>>> import urllib2 
>>> req = urllib2.Request('http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg') 
>>> useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' 
>>> req.add_header('User-Agent',useragent) 
>>> resp = urllib2.urlopen(req) 
>>> resp.getcode() 
200 
>>> data = resp.read() 
>>> with open("image.jpg","wb") as f: 
...  f.write(data) 
... 
>>> 
+0

'urllib'不適用於維基百科。我得到'403'錯誤信息。 – Shah

+0

@RangRag我加了'FancyURL'。現在它工作了。謝謝反正 – Shah

+0

@理查德:很高興聽到這個消息,但看看我的編輯。 – RanRag

相關問題