请求NSEIndia衍生品报价API时触发JSONDecodeError求助
解决NSEIndia衍生品API的JSONDecodeError问题
出现这个错误是因为直接请求API时,NSEIndia的反爬机制会拦截请求,返回的不是有效JSON数据(大概率是反爬提示的HTML页面或者空内容)。解决核心是先通过访问官网主页让session获取必要的Cookie,再发起API请求。
修改后的代码如下:
import requests import json # 初始化会话 session = requests.Session() headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' } # 先访问NSE主页,获取服务器要求的Cookie session.get('https://www.nseindia.com', headers=headers) # 发起衍生品报价API请求 url = 'https://www.nseindia.com/api/quote-derivative?symbol=NIFTY&identifier=FUTIDXNIFTY29-02-2024XX0.00' response = session.get(url, headers=headers) # 校验请求状态并处理数据 if response.status_code == 200: try: data = response.json() print(data) except json.JSONDecodeError as e: # 若仍报错,打印返回内容排查问题 print("返回内容不是有效JSON:") print(response.text) else: print(f"请求失败,状态码:{response.status_code}")
关键细节:
- 必须先访问NSE主页:服务器会给会话设置必要的Cookie,没有这些Cookie的API请求会被直接拦截
- 简化了请求头:去掉了可能导致解码异常的
br编码格式,让requests自动处理编码 - 增加了错误排查逻辑:如果还是解码失败,直接打印返回内容,能快速看到是反爬页面还是其他问题
内容的提问来源于stack exchange,提问作者sachin sawant
相关产品推荐
相关产品推荐

