2017-01-15 2 views
0

파이썬 (> 10k)을 사용하여 다수의 웹 페이지에서 데이터를 구문 분석하려고합니다. 500 루프마다 오류가 발생합니다. 나는 이것을 try - except 코드 블록으로 고치려고 시도했지만 오류를 반환하기 전에 url을 4 번 또는 5 번 열어 재 시도하려고 함수를 개선하고 싶다. 이것을 할 수있는 우아한 방법이 있습니까? 아래시간 초과시 파이썬에서 urllib로 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을 정의해야합니다.