なぜurllib2でurllib2.httperrorを取得し、urllibでエラーがないのですか?

StackOverflow https://stackoverflow.com/questions/1482028

  •  18-09-2019
  •  | 
  •  

質問

次の簡単なコードがあります。

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に置き換えると、エラーメッセージが表示されません。誰かがこの行動を説明できますか?

役に立ちましたか?

解決

オリジナル urllib 403コードで例外を提起するだけではありません。追加する場合 print c.getcode() あなたのプログラムの最後の行に、 urllib それに到達して、まだ403を印刷します。

それからあなたがそうするなら print c.read() 最後に、Wikipediaから実際にエラーページを取得したことがわかります。それはただの問題です urllib2 エラー403をランタイム例外として扱うことを決定する urllib それでもエラー403を取得してから、ページで何かをすることができます。

他のヒント

Wikipediaは、urllib2のデフォルトユーザーエージェントをフィルタリングしているようです。変更するだけです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top