2017-01-15 8 views
0

Python(> 10k)を使用して多数のWebページからデータを解析しようとしていますが、これを行うために書いた関数がしばしばタイムアウトになります500ループごとにエラーが発生します。私はtry - except codeブロックでこれを修正しようとしましたが、エラーを返す前にurlを4〜5回開くように関数を改良したいと思います。これを行うエレガントな方法はありますか?タイムアウト時にurllibでpythonでurlを開くのを再試行します。

以下の私のコード:

def url_open(url): 
    from urllib.request import Request, urlopen 
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) 
    try: 
     s = urlopen(req,timeout=50).read() 
    except urllib.request.HTTPError as e: 
     if e.code == 404: 
      print(str(e)) 
     else: 
      print(str(e)) 
      s=urlopen(req,timeout=50).read() 
      raise 
    return BeautifulSoup(s, "lxml") 
+0

[失敗した場合にurllib2.requestを再試行する方法]の複製がありますか?(http://stackoverflow.com/questions/9446387/how-to-retry-urllib2-request-when-fails) – phss

答えて

0

私は過去に再試行するために、このようなパターンを使用しました:

def url_open(url): 
    from urllib.request import Request, urlopen 
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) 
    retrycount = 0 
    s = None 
    while s is None: 
     try: 
      s = urlopen(req,timeout=50).read() 
     except urllib.request.HTTPError as e: 
      print(str(e)) 
      if canRetry(e.code): 
       retrycount+=1 
       if retrycount > 5: 
        raise 
       # thread.sleep for a bit 
      else: 
       raise 

    return BeautifulSoup(s, "lxml") 

は、あなただけのどこかcanRetryを定義する必要があります。

関連する問題