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

Python爬取congress.gov触发HTTP Error 403: Forbidden报错求助

问题排查思路

返回HTTP Error 403: Forbidden代表服务器识别出请求为非合规用户访问,主动拒绝了响应,按优先级排查以下问题:

  • 第一优先级:默认请求标识被拦截。urllib发起请求时默认携带的User-Agent为Python-urllib/版本号,congress.gov的反爬规则会直接拦截这类明确标记为爬虫的请求,这是该错误的核心诱因。
  • 第二优先级:代码逻辑瑕疵。读取txt文件中的URL时没有提前去除行尾换行符,传给请求方法的URL带不可见换行符;另外保存路径拼接时缺少目录分隔符,会导致本地保存路径异常。
  • 第三优先级:请求频率过高。批量请求如果无间隔连续发送,短时间内请求量超过站点阈值,会被WAF临时封禁IP返回403。
可行修复方案

修复上述问题的可运行代码如下,核心改动是添加模拟浏览器的请求头、修复路径/URL处理逻辑、增加合理请求间隔:

import urllib.request
import time
import os

# 基础配置
save_root = '/Users/myusername/Desktop/py_test'
os.makedirs(save_root, exist_ok=True)
# 模拟普通桌面浏览器请求头,绕过基础反爬校验
req_headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
    "Referer": "https://www.congress.gov/"
}

with open('/Users/myusername/Desktop/py_test/url_list.txt', 'r', encoding='utf-8') as f:
    for raw_line in f:
        url = raw_line.strip()
        if not url:
            continue
        # 拼接合法保存路径,补充.html后缀方便本地直接打开
        file_name = f"{url.split('/')[-1]}.html"
        save_path = os.path.join(save_root, file_name)
        try:
            req = urllib.request.Request(url, headers=req_headers)
            with urllib.request.urlopen(req, timeout=20) as resp, open(save_path, 'wb') as f_out:
                f_out.write(resp.read())
            print(f"下载完成: {url}")
            # 每次请求间隔3秒,控制请求频率
            time.sleep(3)
        except Exception as e:
            print(f"下载失败 {url}, 错误: {str(e)}")
            continue

额外注意事项

  • 如果调整后仍偶发403,可将请求间隔拉长到5-10秒,不要尝试用高并发方式爬取该站点,公开页面爬取速率过高会导致IP被长期封禁
  • 运行代码前先在浏览器中手动打开1-2个目标URL,确认页面可正常访问、URL未失效
  • 若本地网络访问congress.gov本身存在连通性问题,需要先解决网络问题再运行爬虫

内容的提问来源于stack exchange,提问作者James O'Connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:45:40