我试图从网站的各种网页上抓取HTML.但是,我偶尔会收到以下错误:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Run Code Online (Sandbox Code Playgroud)
我试图做一个"while"循环继续尝试,直到错误消失,但我还没有想出循环的正确格式.似乎网站有点不稳定,因为它似乎每次都在不同的网页上失败.
我正在尝试做这样的事情:
web_raw_results = urllib2.urlopen(web_url)
while urllib2.HTTPError:
web_raw_results = urllib2.urlopen(web_url)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它似乎正好相反(似乎它反复拉动相同的网页,直到它出现错误).
我对Python很陌生,我只是搞乱一个爱好项目,所以不要以为我非常理解.我确定我犯了一个愚蠢的错误,但我无法弄清楚我做错了什么.
lar*_*sks 10
urllib.urlopen抛出一个例外.您需要使用try和except语句来"捕获"异常,如下所示:
while True:
try:
web_raw_results = urllib2.urlopen(web_url)
break
except urllib.HTTPError:
continue
Run Code Online (Sandbox Code Playgroud)
这将持续循环,直到获取成功.你真的不想这样做; 在这种紧密循环中反复请求URL可能会被服务器运营商所厌恶.您可能希望在重试之前插入延迟,并且您可能希望表现不同,具体取决于您是否收到500错误或其他错误.也许:
while True:
try:
web_raw_results = urllib2.urlopen(web_url)
break
except urllib.HTTPError, detail:
if detail.errno == 500:
time.sleep(1)
continue
else:
raise
Run Code Online (Sandbox Code Playgroud)
这将暂停1秒并在500错误的情况下继续循环; 否则它将raise是异常(将其传递给调用堆栈).
在Python的教程有很多很好的信息.