簡體   English   中英

如何處理python搜尋器的urlopen錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM