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その理由は、ウィキメディアのコンテンツにアクセスするためのリクエストを送信するとすぐに、このリクエストがによって送信されていないことに気づきbrowser、403エラーをスローするためです。

Webサイトは、このタイプのチェックを実行して、ボットがコンテンツにアクセスしていないことを確認します。他にも多くのチェックがありUser-Agent、そのうちの1つです。

したがって、ブラウザがリクエストを送信しているようにするには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 に答える