0

我正在寻找一种从 url 获取 http 响应代码的快速方法。如果代码为 200',则下载图像。我可以使用 MyOpener 获取响应代码吗?坦克

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
4

1 回答 1

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原因是一旦您发送访问维基媒体内容的请求,它就会意识到该请求不是由 a 发送的,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)
...
>>>
于 2012-05-26T19:46:41.240 回答