如何处理python crawler的urlopen错误?

时间:2016-05-03 02:32:23

标签: python web-crawler urlopen

当我编写python crawler时,我经常使用urlopen。有时它无法打开网址(所以我收到错误),但是当我重新打开此网址时,它会成功。所以我通过写这样的爬虫来处理这种情况:

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

我认为这段代码很难看......但是它有效,所以有一些优雅的方法吗?

2 个答案:

答案 0 :(得分:0)

我强烈建议您使用requests库。您可能会遇到同样的问题,但我发现请求更容易使用,也更可靠。

同样的请求就像这样

def url_open(url):
    while True:
        try:
            response = requests.get(url, headers=header)
            break
       except:
            continue
return response.text

你得到什么错误?

答案 1 :(得分:0)

我建议继续使用带有会话和适配器的请求API,以便您可以显式设置重试次数。这是更多的代码,但它绝对更清晰:

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