6

私は次の簡単なコードを持っています:

import urllib2
import sys
sys.path.append('../BeautifulSoup/BeautifulSoup-3.1.0.1')
from BeautifulSoup import *
page='http://en.wikipedia.org/wiki/Main_Page'
c=urllib2.urlopen(page)

このコードは、次のエラーメッセージを生成します。

    c=urllib2.urlopen(page)
  File "/usr/lib64/python2.4/urllib2.py", line 130, in urlopen
    return _opener.open(url, data)
  File "/usr/lib64/python2.4/urllib2.py", line 364, in open
    response = meth(req, response)
  File "/usr/lib64/python2.4/urllib2.py", line 471, in http_response
    response = self.parent.error(
  File "/usr/lib64/python2.4/urllib2.py", line 402, in error
    return self._call_chain(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 480, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

しかし、urllib2をurllibに置き換えても、エラーメッセージは表示されません。誰かがこの振る舞いを説明できますか?

4

3 に答える 3

10

オリジナルurllibは、403コードで例外を発生させません。print c.getcode()プログラムの最後の行に追加すると、その行にurllib到達し、403を出力します。

最後に行うprint c.read()と、ウィキペディアから実際にエラーページが表示されたことがわかります。urllib2エラー403を実行時例外として扱うことを決定するだけで、エラー403urllibを取得してから、ページで何かを実行できるようにするのではありません。

于 2009-09-26T19:55:21.663 に答える
4

ウィキペディアは、urllib2のデフォルトのユーザーエージェントを除外しているようです。変更するだけです。

于 2009-09-26T19:52:40.017 に答える
0

urllib2.HTTPErrorまたはurllib.error.HTTPErrorをオーバーライドし、とにかく応答HTMLを読み取るこの投稿は、サーバーから詳細なエラーメッセージを取得するための優れた方法を示しています。

于 2011-02-26T08:08:56.060 に答える