You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

urllib.request库遇到HTTP错误时如何跳过异常继续遍历URL?

问题原因
  • 报错的核心逻辑问题:page.read() 和 page.close() 写在了所有逻辑分支外,当URL请求触发异常时,page 还是初始赋值的 None,调用不存在的 read 方法自然会触发AttributeError。
  • 原有代码没有做「请求成功才处理页面内容」的逻辑限制,失败请求也会走读取步骤,导致整个爬取中断。
修正方案

把页面读取、关闭的逻辑挪到else分支即可,else分支只有在try块没有抛出任何异常时才会执行,刚好满足「请求成功才处理页面,出错直接跳过继续爬下一个URL」的需求。

修正后的完整代码如下:

import urllib.request as ur
httpErrors = 0
# 此处替换为你自己的URL列表
url_List = []

for i in url_List:
  website = ur.Request(i, data=None, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'})
  page = None
  try:
    page = ur.urlopen(website)
  except Exception as e:
    print(f"URL {i} 访问出错:{e}")
    httpErrors += 1
  else:
    print(f"URL {i} 访问成功")
    # 仅请求成功时才执行读取、关闭操作
    data = page.read()
    page.close()
    # 此处可添加你后续的文本处理逻辑,比如存储内容、解析字段等
  finally:
    print('累计HTTP错误数:' + str(httpErrors))

额外优化说明:如果需要后续重试失败的URL,可以额外定义一个错误列表,在except分支把出错的URLi追加到列表中,爬取完成后单独处理即可。

内容的提问来源于stack exchange,提问作者sanminchui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:09:02