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

使用Python+Selenium无法保存nseindia接口JSON数据,求问题原因及解决方案

问题原因

  • 核心错误为文件写入逻辑错误:json.dumps() 仅负责将Python对象序列化为JSON字符串,不会直接写入文件对象。你的代码仅调用了json.dumps()但未将返回的字符串写入已打开的文件对象,也没有使用专门用于文件写入的json.dump()方法,是文件为空的直接原因。
  • 元素定位逻辑稳定性极低:你定位的rawdata-tab、data类元素都是Firefox浏览器自带JSON预览页的内置元素,一旦浏览器版本更新、预览组件规则调整,或者更换其他浏览器运行,定位逻辑会直接失效。
  • 存在反爬触发风险:NSE接口有严格的反爬校验,直接通过Selenium访问接口可能被拦截,返回验证码页或错误响应,导致你拿到的文本不是合法JSON结构。

修复方案

原有代码快速修复

仅需要修改文件写入部分的代码即可,将写入逻辑替换为:

with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(d, f, default=lambda o: '<not serializable>')

更优实现方案

完全不需要调用Selenium启动浏览器,直接用requests模拟请求即可,资源消耗更低、运行速度更快、稳定性更高,参考代码如下:

import json
import requests

# 构造请求头,模拟正常浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Referer": "https://www.nseindia.com/option-chain",
    "Accept": "application/json, text/javascript, */*; q=0.01"
}

# 初始化会话,自动管理Cookie
session = requests.Session()
# 先访问首页获取必要的校验Cookie
session.get("https://www.nseindia.com", headers=headers, timeout=10)

# 请求目标接口
target_url = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
resp = session.get(target_url, headers=headers, timeout=10)
# 校验请求是否成功
resp.raise_for_status()
json_data = resp.json()

# 写入本地文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(json_data, f, ensure_ascii=False, indent=2, default=lambda o: "<not serializable>")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:57:04