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

使用BeautifulSoup提取NSE India下拉菜单option值失败求助

解决NSE期权链页面下拉菜单option提取为空的问题

问题原因

NSE期权链页面中,select_symbol下拉菜单的选项是通过JavaScript动态加载的。你用requests获取的初始HTML仅包含空的<select>标签,并未生成<option>元素,因此find_all('option')会返回空列表。

解决方案1:直接调用NSE官方API(推荐)

NSE提供了公开API接口用于获取可交易股票列表,无需解析动态渲染页面,效率更高。

代码示例

import requests

# 获取F&O标的股票列表的API接口
url = "https://www.nseindia.com/api/equity-stockIndices?index=SECURITIES%20IN%20F%26O"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    "Referer": "https://www.nseindia.com/option-chain"
}

response = requests.get(url, headers=headers)
data = response.json()

# 提取所有股票symbol并整理为列表
symbol_list = [item['symbol'] for item in data['data']]
print(symbol_list[:5])  # 示例输出:['AARTIIND', 'ABB', 'ABBOTINDIA', 'ABCAPITAL', 'ABFRL']

解决方案2:使用Selenium模拟浏览器渲染页面

若API接口发生变动,可通过模拟浏览器加载完整页面后提取元素。

前置步骤

  1. 安装Selenium:pip install selenium
  2. 下载对应浏览器的驱动(如ChromeDriver),并配置到环境变量或指定路径。

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

url = "https://www.nseindia.com/option-chain"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}

# 初始化Chrome浏览器驱动(无头模式)
options = webdriver.ChromeOptions()
options.add_argument(f"user-agent={headers['User-Agent']}")
options.add_argument("--headless=new")  # 不显示浏览器窗口

driver = webdriver.Chrome(options=options)
driver.get(url)

# 等待下拉菜单加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "select_symbol")))

# 解析渲染后的页面内容
soup = BeautifulSoup(driver.page_source, 'lxml')
options = soup.find("select", {"id": "select_symbol"}).find_all("option")

# 提取所有option的value值
symbol_list = [opt['value'] for opt in options if opt.get('value')]
print(symbol_list[:5])

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:05:08