如何继续尝试抛出"urllib2.HTTPError"错误(python)的网页?

Cra*_*igP 1 html python

我试图从网站的各种网页上抓取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抛出一个例外.您需要使用tryexcept语句来"捕获"异常,如下所示:

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的教程有很多很好的信息.