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

如何避免urllib2.HTTPError 404导致程序终止并记录失败信息

解决Python爬取URL时404错误导致脚本终止的问题

嘿,作为Python新手遇到这种脚本突然中断的情况确实挺闹心的!不过别慌,咱们用Python的异常处理机制就能轻松解决——既让循环继续爬下一个URL,又能把访问失败的URL记录下来。

核心思路:捕获404异常

默认情况下,当urllib2遇到404错误时会抛出HTTPError,如果不处理这个异常,程序就会直接终止。咱们要做的就是用try-except块把访问URL的代码包裹起来,专门捕获这个404错误,然后在异常处理逻辑里记录失败的URL,之后循环就会自动继续执行下一个请求了。

完整代码示例

下面是针对你的需求写的代码,每一步都加了注释,方便你理解:

import urllib2

# 初始化一个列表,用来存储所有访问失败的URL
failed_urls = []

# 循环遍历1到100000的entry ID
for entry_id in range(1, 100001):
    # 拼接完整URL,注意要加上http/https协议前缀,否则urllib2会报错
    full_url = f"https://example.com/entry/{entry_id}"
    
    try:
        # 尝试打开URL并获取响应
        response = urllib2.urlopen(full_url)
        # 这里可以添加你处理正常响应内容的逻辑,比如读取页面内容
        # content = response.read()
        print(f"✅ 成功访问:{full_url}")
    
    except urllib2.HTTPError as e:
        # 捕获HTTP错误,重点处理404情况
        if e.code == 404:
            print(f"❌ 404错误:{full_url}")
            failed_urls.append(full_url)
        else:
            # 其他HTTP错误(比如500服务器错误)也可以一起记录
            print(f"❌ HTTP错误 {e.code}:{full_url}")
            failed_urls.append(full_url)
    
    except Exception as e:
        # 捕获其他可能的异常,比如网络连接超时、DNS解析失败等
        print(f"❌ 访问出错:{full_url},错误信息:{str(e)}")
        failed_urls.append(full_url)

# 爬取完成后,把所有失败的URL写入本地文件,方便后续查看
with open("failed_urls.txt", "w") as file:
    for url in failed_urls:
        file.write(url + "\n")

print(f"\n爬取任务完成!共记录 {len(failed_urls)} 个访问失败的URL,已保存到failed_urls.txt")

关键细节说明

  • try-except块:把可能抛出异常的代码放在try里,当异常发生时,程序会跳转到对应的except块执行,而不是直接终止。
  • 捕获特定异常:咱们专门捕获urllib2.HTTPError,并通过e.code判断是不是404错误,这样能精准处理你的场景。
  • 记录失败URL:用列表failed_urls收集所有失败的URL,最后写入文件,方便你后续查看哪些URL被删除了。
  • 协议前缀:一定要给URL加上https://或http://,不然urllib2无法识别合法的网络地址,会抛出其他错误。

额外小建议(新手友好)

如果爬取速度太快,可能会被目标网站封禁IP,你可以在循环里加入延时:

import time
# 在循环的最后添加一行
time.sleep(1)  # 每次请求后暂停1秒

这样修改后,你的脚本就不会因为404错误中途停止了,会稳稳地爬完所有100k个URL,同时把所有失败的记录都保存下来~

内容的提问来源于stack exchange,提问作者J.doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:24:29