当我编写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
我认为这段代码很难看......但是它有效,所以有一些优雅的方法吗?
答案 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