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

爬取SEC网站13F文件遇HTTP Error 403: Forbidden,求解决方法

解决SEC 13F备案文件爬取403 Forbidden错误的方法

SEC服务器会拦截默认爬虫请求,核心解决思路是设置合法的请求头(尤其是User-Agent),让请求看起来像是浏览器发起的。以下是具体修改方案:

1. 定义模拟浏览器的请求头

构造包含浏览器标识的请求头,避免被识别为爬虫:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}

注:User-Agent可以直接复制自己浏览器的真实标识——打开浏览器F12开发者工具,在Network面板中查看任意请求的User-Agent字段即可。

2. 修改requests.get请求

原代码中requests.get(url)需要带上headers参数:

page = requests.get(url, headers=headers)

3. 修改pd.read_html的请求

pd.read_html底层会发起新的请求,同样需要传递请求头,通过requests_kwargs参数实现:

index = pd.read_html(index_url, requests_kwargs={'headers': headers})

4. 可选:添加请求延迟

为避免频繁触发反爬机制,在循环中添加短暂延迟:

time.sleep(2)  # 每次请求后暂停2秒

修改后的完整代码

from bs4 import BeautifulSoup
import requests
import pandas as pd
from datetime import datetime
import time

# 定义模拟浏览器的请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}

url = "https://www.sec.gov/cgi-bin/current?q1=0&q3=13f"
# 带上请求头发起请求
page = requests.get(url, headers=headers)
data = page.text

days_url = []
soup = BeautifulSoup(data, 'lxml')
for link in soup.find_all('a'):
    if 'index' in link.get('href'):
        url_to_save = link.get('href')
        days_url.append(url_to_save)

days_url = days_url[0:1]
for item in days_url:
    index_url = 'https://www.sec.gov' + item  # 重命名变量避免混淆
    # pd.read_html传递请求头
    index = pd.read_html(index_url, requests_kwargs={'headers': headers})
    index = index[0]
    index = index[(index['Document'].str.contains('.html')) & (
        index['Type'].str.contains('INFORMATION TABLE'))]
    try:
        index = index['Document'].iloc[0]
    except:
        pass
    print(index)
    # 添加请求延迟
    time.sleep(2)

额外说明

如果仍然出现403错误,可以尝试添加更多请求头字段(比如Referer),或者进一步降低请求频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:06:20