Pythonのurllib2 urlopenでタイムアウトERROSを検出します
質問
私はまだPythonに比較的新しいので、これが明らかな質問である場合、私は謝罪します。
私の質問は、urllib2ライブラリに関するものであり、それはurlopen機能です。現在、私はこれを使用して別のサーバーから大量のページをロードします(それらはすべて同じリモートホストにあります)が、スクリプトは時々タイムアウトエラーによって殺されます(これは大きなリクエストからのものだと思います)。
タイムアウトの後にスクリプトを実行し続ける方法はありますか?すべてのページを取得できるようになりたいので、ページが取得されるまで試してみて、移動するスクリプトが必要です。
サイドノートでは、サーバーへの接続を開いたままにしますか?
解決
次回エラーが発生したら、エラーメッセージに注意してください。最後の行では、例外の種類がわかります。たとえば、それはaかもしれません urllib2.HTTPError
. 。提起された例外の種類がわかったら、 try...except
ブロック。例えば:
import urllib2
import time
for url in urls:
while True:
try:
sock=urllib2.urlopen(url)
except (urllib2.HTTPError, urllib2.URLError) as err:
# You may want to count how many times you reach here and
# do something smarter if you fail too many times.
# If a site is down, pestering it every 10 seconds may not
# be very fruitful or polite.
time.sleep(10)
else:
# Success
contents=sock.read()
# process contents
break # break out of the while loop
他のヒント
urllib2の欠落マニュアル あなたを助けるかもしれません
所属していません StackOverflow