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

使用BeautifulSoup爬取API遇403错误,浏览器可正常访问求解决

解决Prizepicks API请求403错误的方案

你的403错误确实是请求头配置问题,加上会话验证缺失导致的,以下是具体修复步骤:

1. 修正请求URL

你代码里定义了带筛选参数的pp_props_url,但实际请求的是无参数的url,接口地址不匹配会直接影响请求结果,先统一使用正确的带参数URL(也可以用params单独传递参数)。

2. 清理无效请求头

你添加的Access-Control-Allow-Credentials是服务器响应头,不需要放在请求里;Sec-Fetch-Site、Sec-Fetch-Mode是浏览器自动生成的字段,手动添加反而可能触发反爬拦截,直接删掉这些冗余字段。

3. 补充关键请求头 & 处理会话Cookie

Prizepicks的API需要验证会话权限,你可以先请求官网主页获取有效Cookie,再用同一个会话请求API;同时添加X-Requested-With字段,标识这是AJAX请求,很多站点会通过这个字段验证请求合法性。

修改后的代码示例:

import requests
import pandas as pd

# 目标API地址(带筛选参数)
target_url = 'https://api.prizepicks.com/projections?league_id=7&per_page=250&single_stat=true'

# 精简后的有效请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
    'Accept': 'application/json; charset=UTF-8',
    'Referer': 'https://app.prizepicks.com/',
    'X-Requested-With': 'XMLHttpRequest'  # 关键标识字段
}

# 创建会话,先访问主页获取会话Cookie
session = requests.Session()
session.get('https://app.prizepicks.com/', headers=headers)

# 用同一个会话请求API
r = session.get(target_url, headers=headers)

# 检查响应状态并处理数据
print(r.status_code)
if r.status_code == 200:
    df = pd.json_normalize(r.json()['data'])
    print(df.head())
else:
    print(f"请求失败,状态码:{r.status_code}")

额外提示

  • 如果还是报错,打开浏览器开发者工具(F12),找到API请求的完整请求头,把Cookie字段完整复制到请求头中(注意Cookie有有效期,过期后需要重新复制)。
  • 避免频繁发起请求,必要时添加请求间隔,防止IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:05:43