29

バックグラウンド:モジュールurllib.urlretrieve内の他の関数とは対照的にurllib*、フック関数のサポート (以下をreporthook参照) .. を使用して、テキストの進行状況バーを表示するために使用しています。これは Python >=2.6 です。

>>> urllib.urlretrieve(url[, filename[, reporthook[, data]]])

ただし、urlretrieve非常に愚かであるため、HTTP 要求のステータスを検出する方法がありません (例: 404 または 200 でしたか?)。

>>> fn, h = urllib.urlretrieve('http://google.com/foo/bar')
>>> h.items() 
[('date', 'Thu, 20 Aug 2009 20:07:40 GMT'),
 ('expires', '-1'),
 ('content-type', 'text/html; charset=ISO-8859-1'),
 ('server', 'gws'),
 ('cache-control', 'private, max-age=0')]
>>> h.status
''
>>>

フックのようなサポート (進行状況バーを表示するため) と適切な HTTP エラー処理を備えたリモート HTTP ファイルをダウンロードする最もよく知られている方法は何ですか?

4

3 に答える 3

15

以下を使用する必要があります。

import urllib2

try:
    resp = urllib2.urlopen("http://www.google.com/this-gives-a-404/")
except urllib2.URLError, e:
    if not hasattr(e, "code"):
        raise
    resp = e

print "Gave", resp.code, resp.msg
print "=" * 80
print resp.read(80)

編集:ここでの理論的根拠は、例外的な状態が発生することを予期しない限り、それが発生するのは例外であり、おそらくそれについて考えさえしていないということです-したがって、失敗したときにコードを実行し続ける代わりに、デフォルトの動作は、非常に賢明なことに、その実行を禁止することです。

于 2010-02-04T20:17:57.983 に答える