2012-05-26 37 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

相关问题