3

私はまだPythonに比較的慣れていないので、これが明らかな質問である場合は、お詫び申し上げます。

私の質問はurllib2ライブラリに関するもので、それはurlopen関数です。現在、これを使用して別のサーバーから大量のページをロードしています(これらはすべて同じリモートホスト上にあります)が、タイムアウトエラーによってスクリプトがときどき強制終了されます(これは大量のリクエストによるものと思われます)。

タイムアウト後もスクリプトを実行し続ける方法はありますか?すべてのページをフェッチできるようにしたいので、ページを取得して次に進むまで試行を続けるスクリプトが必要です。

ちなみに、サーバーへの接続を開いたままにしておくと役に立ちますか?

4

2 に答える 2

2

次回エラーが発生したときは、エラーメッセージに注意してください。最後の行は、例外のタイプを示しています。たとえば、。の場合があります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
于 2010-08-18T18:03:54.907 に答える
1

urllib2の不足しているマニュアルはあなたを助けるかもしれません

于 2010-08-18T18:13:03.363 に答える