[英]how to handle python crawler's urlopen error?
編寫python搜尋器時,我經常使用urlopen。 有時它無法打開url(所以我得到一個錯誤),但是當我重試打開此url時,它會成功。 因此,我通過像這樣編寫我的搜尋器來處理這種情況:
def url_open(url):
'''open the url and return its content'''
req = urllib.request.Request(headers=header, url=url)
while True:
try:
response = urllib.request.urlopen(req)
break
except:
continue
contents = response.read().decode('utf8')
return contents
我認為這段代碼很難看...但是它可以工作,所以有一些優雅的方法嗎?
我強烈建議您使用請求庫。 您可能最終遇到相同的問題,但是我發現請求更易於使用,也更可靠。
相同的請求會像這樣
def url_open(url):
while True:
try:
response = requests.get(url, headers=header)
break
except:
continue
return response.text
你遇到了什么錯誤?
我建議繼續使用Requests API和Sessions和Adapters,以便您可以顯式設置重試次數。 它是更多的代碼,但絕對更干凈:
import requests
session = requests.Session()
http_adapter = requests.adapters.HTTPAdapter(max_retries=3)
https_adapter = requests.adapters.HTTPAdapter(max_retries=3)
session.mount('http://', http_adapter)
session.mount('https://', https_adapter)
response = s.get(url)
if response.status_code != 200 then:
# Handle the request failure here
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.