2017-09-06 19 views
0

..어디서 예외를 사용해야합니까? URLLIB Python3 나는 웹 사이트를 크롤링 내가 필요로하는 항목을 찾기 위해이 스크립트를

from socket import timeout 
from urllib.request import Request, urlopen, URLError 
import bs4,urllib.parse 
def track(self): 
    for _object in _objects: 
     req = Request('http://example.com/item.php?id='+str(_object)) 
     req.add_header('User-Agent', 
         'Mozilla 5.0') 
     _URL = urlopen(req).read() 
     soup = bs4.BeautifulSoup(_URL, "html.parser") 
     allResults = [] 
     i = 1 

     for hit in soup.findAll('cite'): 
      if ("% Off" in hit.text): 
       allResults.append(str(i) + ". " + hit.text + " | Item => " + _object) 
       i += 1 

     if (len(allResults) == 0): 
      print("No result found for this item => " + _object) 
     else: 
      for element in allResults: 
       print(element) 

내가 연결이 웹 사이트에 실패, 또는 ​​다른 이유로는 '나오지 않았어 그렇게 할 때, 예외를 throw 할 URL에 도달하면 "문제가 발생했습니다"

나는 socket.timeout을 사용해야 만하지만 코드에 어디에 넣어야합니까?

답변

1

랩 시도로 urlopen 호출 : 호출 제외 :

try: 
    _URL = urlopen(req).read() 
except Exception as e: 
    print("Something happened wrong: {}".format(e)) 
    # do something, eg: continue 
+0

은 무엇 코드의 나머지 부분에 일어날 것인가? 거기에 예외를 던지면 다음 줄이 예외 이후에 실행됩니다. 수프 변수를 정의했습니다. – DarkSuniuM

+1

그건 당신에게 달렸지 만, 예외를 잡으면 서 예외를 잡으려는 것입니다. 이 작업을 반복 할 때'continue'를 호출하고 다음'_object'를 계속 수행하십시오. –