我正在寻找一种从网址获取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
答案 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)
...
>>>