从FanycURLLoader获取响应代码

时间:2012-05-26 19:26:36

标签: python

我正在寻找一种从网址获取http响应代码的快捷方法。如果代码是200',则下载图像。我可以使用MyOpener获取响应代码吗? tahnks

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')

更新:

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

1 个答案:

答案 0 :(得分: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)
...
>>>