1

Web スクレイピングから使用するコードの一部を開発しました。

link = 'http://www.cmegroup.com'+div.findAll('a')[3]['href']
user_agent = 'Mozilla/5.0'
headers = {'User-Agent':user_agent}
req = urllib2.Request(link, headers=headers)
page = urllib2.urlopen(req).read()

しかし、私が理解していないのは、リンクを要求するときにエラーが発生することがあります。しかし、時々、そうではありません。たとえば、エラー:

urllib2.URLError: <urlopen error [Errno -2] Name or service not known>

このリンクに出てきました:

http://www.cmegroup.com/trading/energy/refined-products/mini-european-naphtha-platts-cif-nwe-swap-futures_product_calendar_futures.html

コードを再実行すると、このリンクではエラーが発生しませんが、他のリンクではエラーが発生します。これはワイヤレス接続が原因でしょうか?

4

1 に答える 1

2

これは、DNS またはネットワークの問題のようです。同じ URL に対して同じコードを数回実行し、機能する場合と機能しない場合がある場合、問題はおそらくコードではありません。

問題をデバッグするには、文の周りで try-except ブロックを実行し、そこから pdb または ipdb (インストールされている場合) を開始します。

try:
    response = urllib2.urlopen(req)
except urllib2.URLError as ex:
    import pdb; pdb.set_trace()  # Use ipdb if installed
else:
    page = response.read()

次に、応答、ステータス コード、例外トレースなどを確認できます。

(補足として、外部依存関係が問題にならない場合は、 urllib2 の代わりにrequestsパッケージを使用することを強くお勧めします。)

于 2013-08-16T12:24:22.907 に答える