如何绕过PrizePick API爬取时出现的403错误?
解决Prizepicks API 403禁止访问问题
403错误一般是服务器拒绝了请求,核心原因大概率是请求头不完整、请求参数传递方式不符合API要求导致的,以下是可行的修复方案:
1. 修正请求参数传递方式
GET请求的参数必须通过params参数传递,原代码里用data传递GET参数是错误的(data仅用于POST请求提交表单数据)。
2. 添加必要的请求头
模拟浏览器的请求头,让服务器识别为合法的用户请求,至少需要补充User-Agent、Accept等关键字段。
修改后的完整代码:
import pandas as pd import requests from pandas.io.json import json_normalize params = ( ('league_id', '7'), ('per_page', '250'), ('projection_type_id', '1'), ('single_stat', 'true'), ) # 模拟浏览器标准请求头 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': 'application/json, text/plain, */*', 'Accept-Language': 'en-US,en;q=0.9', } session = requests.Session() # 用params传递GET参数,同时携带请求头 response = session.get('https://api.prizepicks.com/projections', params=params, headers=headers) print(response.status_code) if response.status_code == 200: df1 = json_normalize(response.json()['included']) df1 = df1[df1['type'] == 'new_player'] df2 = json_normalize(response.json()['data']) df = pd.DataFrame(zip(df1['attributes.name'], df2['attributes.line_score']), columns=['name', 'points']) print(df.head())
额外注意事项
- 如果还是返回403,可通过浏览器开发者工具查看正常请求的完整头信息,补充
Referer、Origin等字段 - 避免短时间内频繁发送请求,防止IP被服务器封禁
- 务必遵守Prizepicks的服务条款,未经授权爬取数据可能涉及法律风险
内容的提问来源于stack exchange,提问作者xsight
相关产品推荐
相关产品推荐

