如何抓取纳斯达克(NASDAQ)数据:分步指南

探索三种经过验证的纳斯达克数据采集方法,从直接 API 访问到先进的 AI 驱动网页抓取。非常适合金融分析与交易应用。
7 分钟阅读
纳斯达克网页抓取

金融市场每秒都会产生海量数据。纳斯达克是全球最大的交易所之一,聚集着苹果、微软、特斯拉、亚马逊等知名公司。

如果你正在构建交易算法、研究看板或金融科技应用,采集这类金融数据既是重大机遇,也伴随技术挑战。本指南将介绍三种从纳斯达克采集金融数据的成熟方法:直接调用内部端点的 API 访问、构建可扩展的企业级代理基础设施,以及基于 MCP(模型上下文协议)的 AI 驱动网页抓取。

理解纳斯达克数据版图

纳斯达克提供全面的市场数据,适用于研究、回测与分析型应用。通常可获取如下信息:

  • 价格数据——最新成交价、当日高/低、开盘/收盘价、成交量及涨跌幅
  • 历史数据——每日 OHLC(开、高、低、收),分红历史、拆股记录与历史成交量
  • 公司信息——公司基本信息、行业与细分领域分类、SEC 文件与公司新闻链接
  • 其他功能——交互式图表、财报日历、机构持仓数据

交易员和投资者通过回测在实盘前评估策略的历史表现。企业则利用这些市场数据进行竞争情报分析,以跟踪竞品动态并识别趋势与机会。若需更深入的场景,请参阅我们的金融数据应用案例

下面开始介绍如何抓取这些数据。

数据提取方法论

现代金融网站如纳斯达克、雅虎财经谷歌财经多为单页应用(SPA),通过 JavaScript 渲染动态内容。与其解析脆弱的 HTML,不如直接调用其内部 JSON API 端点,因 JSON 响应更简洁且更稳定。

识别纳斯达克 JSON 端点的方法:

  1. 打开任意股票页面(如 https://www.nasdaq.com/market-activity/stocks/aapl),开启浏览器开发者工具。
  2. Network面板选择Fetch/XHR过滤器,专注 API 流量。
  3. 刷新页面以捕获所有请求。

刷新后,你会看到如 market-infochartwatchlist 等请求。

纳斯达克市场信息

点击任意请求查看 JSON 载荷。例如 market-info 请求会展示包含实时市场信息的完整数据结构。

斯达克 JSON 数据

确定端点后,我们来配置所需工具。

前置条件

  • Python 3.x
  • 代码编辑器(VS Code、PyCharm 等)
  • 对 Chrome 开发者工具的基本了解
  • 理解Python 抓取基础与数据提取库
  • requests 库。使用命令 pip install requests 安装

如果你对 requests 库不熟悉,我们的Python requests 指南涵盖本教程会用到的全部技巧。

工具就绪后,进入第一种方法。

方法一——通过直接 API 访问进行网页抓取

我们将使用的关键端点以干净的 JSON 响应提供完整的市场数据。

市场状态与交易日程

该端点返回美国市场状态、倒计时信息与完整的交易日程。覆盖常规时段、盘前与盘后,并提供多种时间戳格式的前/后一个交易日,便于集成。

端点:https://api.nasdaq.com/api/market-info

示例实现:

import requests

headers = {
    'accept': 'application/json',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}

response = requests.get('https://api.nasdaq.com/api/market-info', headers=headers)

print(response.json())

API 将返回如下市场状态数据:

{
  "data": {
    "country": "U.S.",
    "marketIndicator": "Market Open",
    "uiMarketIndicator": "Market Open",
    "marketCountDown": "Market Closes in 3H 7M",
    "preMarketOpeningTime": "Jul 29, 2025 04:00 AM ET",
    "preMarketClosingTime": "Jul 29, 2025 09:30 AM ET",
    "marketOpeningTime": "Jul 29, 2025 09:30 AM ET",
    "marketClosingTime": "Jul 29, 2025 04:00 PM ET",
    "afterHoursMarketOpeningTime": "Jul 29, 2025 04:00 PM ET",
    "afterHoursMarketClosingTime": "Jul 29, 2025 08:00 PM ET",
    "previousTradeDate": "Jul 28, 2025",
    "nextTradeDate": "Jul 30, 2025",
    "isBusinessDay": true,
    "mrktStatus": "Open",
    "mrktCountDown": "Closes in 3H 7M",
    "pmOpenRaw": "2025-07-29T04:00:00",
    "ahCloseRaw": "2025-07-29T20:00:00",
    "openRaw": "2025-07-29T09:30:00",
    "closeRaw": "2025-07-29T16:00:00"
  }
}

很好!这展示了通过 API 获取实时市场时间数据的方式。

股票报价数据

纳斯达克的报价端点为任意上市公司提供详细股票数据,包括最新价格、成交量、公司信息与市场统计。

端点:https://api.nasdaq.com/api/quote/{symbol}/info?assetclass=stocks。需要股票代码(AAPL、TSLA)并将 assetclass 设为 stocks 以获取股票数据。

纳斯达克摘要概览

示例代码:



import requests

def get_stock_info(symbol, headers):
url = f'https://api.nasdaq.com/api/quote/{symbol}/info?assetclass=stocks'
response = requests.get(url, headers=headers)
return response.json()

headers = {
'accept': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}
stock_info = get_stock_info('AAPL', headers)

print(stock_info)

The API returns stock quote data like this:

{
  "data": {
    "symbol": "AAPL",
    "companyName": "Apple Inc. Common Stock",
    "stockType": "Common Stock",
    "exchange": "NASDAQ-GS",
    "isNasdaqListed": true,
    "isNasdaq100": true,
    "isHeld": false,
    "primaryData": {
      "lastSalePrice": "$211.9388",
      "netChange": "-2.1112",
      "percentageChange": "-0.99%",
      "deltaIndicator": "down",
      "lastTradeTimestamp": "Jul 29, 2025 12:51 PM ET",
      "isRealTime": true,
      "bidPrice": "$211.93",
      "askPrice": "$211.94",
      "bidSize": "112",
      "askSize": "235",
      "volume": "23,153,569",
      "currency": null
    },
    "secondaryData": null,
    "marketStatus": "Open",
    "assetClass": "STOCKS",
    "keyStats": {
      "fiftyTwoWeekHighLow": {
        "label": "52 Week Range:",
        "value": "169.21 - 260.10"
      },
      "dayrange": {
        "label": "High/Low:",
        "value": "211.51 - 214.81"
      }
    },
    "notifications": [
      {
        "headline": "UPCOMING EVENTS",
        "eventTypes": [
          {
            "message": "Earnings Date : Jul 31, 2025",
            "eventName": "Earnings Date",
            "url": {
              "label": "AAPL Earnings Date : Jul 31, 2025",
              "value": "/market-activity/stocks/AAPL/earnings"
            },
            "id": "upcoming_events"
          }
        ]
      }
    ]
  }
}

公司基本面与关键指标

纳斯达克的 summary API 提供关键财务数据,包括市值、成交量、分红信息与行业分类等。

访问纳斯达克公司页面并滚动至“Key Data”部分时,浏览器会调用特定端点:https://api.nasdaq.com/api/quote/{SYMBOL}/summary?assetclass=stocks,其中包含该公司的基本面数据。

纳斯达克关键统计

示例代码:

import requests

def get_company_data(symbol, headers):
    url = f'https://api.nasdaq.com/api/quote/{symbol}/summary?assetclass=stocks'
    response = requests.get(url, headers=headers)
    return response.json()

headers = {
    'accept': 'application/json',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}
company_data = get_company_data('AAPL', headers)

print(company_data)

API 将返回如下关键公司数据:

{
  "data": {
    "symbol": "AAPL",
    "summaryData": {
      "Exchange": {
        "label": "Exchange",
        "value": "NASDAQ-GS"
      },
      "Sector": {
        "label": "Sector",
        "value": "Technology"
      },
      "Industry": {
        "label": "Industry",
        "value": "Computer Manufacturing"
      },
      "OneYrTarget": {
        "label": "1 Year Target",
        "value": "$235.00"
      },
      "TodayHighLow": {
        "label": "Today's High/Low",
        "value": "$214.81/$210.825"
      },
      "ShareVolume": {
        "label": "Share Volume",
        "value": "25,159,852"
      },
      "AverageVolume": {
        "label": "Average Volume",
        "value": "51,507,684"
      },
      "PreviousClose": {
        "label": "Previous Close",
        "value": "$214.05"
      },
      "FiftTwoWeekHighLow": {
        "label": "52 Week High/Low",
        "value": "$260.1/$169.2101"
      },
      "MarketCap": {
        "label": "Market Cap",
        "value": "3,162,213,080,720"
      },
      "AnnualizedDividend": {
        "label": "Annualized Dividend",
        "value": "$1.04"
      },
      "ExDividendDate": {
        "label": "Ex Dividend Date",
        "value": "May 12, 2025"
      },
      "DividendPaymentDate": {
        "label": "Dividend Pay Date",
        "value": "May 15, 2025"
      },
      "Yield": {
        "label": "Current Yield",
        "value": "0.49%"
      }
    },
    "assetClass": "STOCKS",
    "additionalData": null,
    "bidAsk": {
      "Bid * Size": {
        "label": "Bid * Size",
        "value": "$211.75 * 280"
      },
      "Ask * Size": {
        "label": "Ask * Size",
        "value": "$211.79 * 225"
      }
    }
  }
}

纳斯达克图表与历史数据

纳斯达克通过专用端点提供不同时间范围与粒度的图表数据。

纳斯达克普通股图表

根据时间范围,图表数据分为:

  • 日内端点——提供 1D、5D 的逐分钟数据。
  • 历史端点——提供 1M、6M、YTD、1Y、5Y、MAX 的每日 OHLC 数据。

日内图表数据(1D)

用于分析交易时段内的逐分钟价格变动。

端点:https://api.nasdaq.com/api/quote/{symbol}/chart?assetclass=stocks&charttype=rs

纳斯达克普通股图表 API

所需参数:股票代码、assetclass=stocks(股票)、charttype=rs(常规时段)。

示例实现:

import requests

def get_chart_data(symbol, headers):
    url = f'https://api.nasdaq.com/api/quote/{symbol}/chart?assetclass=stocks&charttype=rs'
    response = requests.get(url, headers=headers)
    return response.json()

headers = {
    'accept': 'application/json',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}
chart_data = get_chart_data('AAPL', headers)

print(chart_data)

API 将返回如下日内数据结构:

{
    "data": {
        "chart": [
            {
                "w": 995,                    // Trading volume for this minute
                "x": 1753416000000,          // Timestamp (milliseconds)
                "y": 214.05,                 // Price
                "z": {                       // Human-readable format
                    "time": "4:00 AM",
                    "shares": "995",
                    "price": "$214.05",
                    "prevCls": "213.7600"    // Previous day's close
                }
            }
        ]
    }
}

若需 5 天逐分钟数据,使用不同端点:

https://charting.nasdaq.com/data/charting/intraday?symbol=AAPL&mostRecent=5&includeLatestIntradayData=1

返回数据示例(节选):

{
    "companyName": "APPLE INC",
    "marketData": [
        {
            "Date": "2025-07-22 09:30:00",
            "Value": 212.639999,
            "Volume": 2650933
        },
        {
            "Date": "2025-07-22 09:31:00",
            "Value": 212.577103,
            "Volume": 232676
        }
    ],
    "latestIntradayData": {
        "Date": "2025-07-28 16:00:00",
        "High": 214.845001,
        "Low": 213.059998,
        "Open": 214.029999,
        "Close": 214.050003,
        "Change": 0.169998,
        "PctChange": 0.079483,
        "Volume": 37858016
    }
}

历史数据(1M、6M、YTD、1Y、5Y、MAX)

更长时间范围的每日 OHLC 数据通过历史端点提供。

端点:https://charting.nasdaq.com/data/charting/historical?symbol={symbol}&date={start}~{end}&.

纳斯达克历史数据

所需参数:股票代码与日期范围(格式为 “YYYY-MM-DD~YYYY-MM-DD”)。示例:

import requests

def get_historical_data(symbol, headers):
    url = f"https://charting.nasdaq.com/data/charting/historical?symbol={symbol}&date=2024-08-24~2024-10-23&"
    response = requests.get(url, headers=headers)
    return response.json()

headers = {
    "accept": "*/*",
    "referer": "https://charting.nasdaq.com/dynamic/chart.html",
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
}

historical_data = get_historical_data("AAPL", headers)

print(historical_data)

返回数据示例(节选):

{
    "companyName": "APPLE INC",
    "marketData": [
        {
            "Date": "2024-11-18 00:00:00",
            "High": 229.740000,
            "Low": 225.170000,
            "Open": 225.250000,
            "Close": 228.020000,
            "Volume": 44686020
        }
    ],
    "latestIntradayData": {
        "Date": "2025-07-25 16:00:00",
        "High": 215.240005,
        "Low": 213.399994,
        "Open": 214.699997,
        "Close": 213.880005,
        "Change": 0.120010,
        "PctChange": 0.056143,
        "Volume": 40268780
    }
}

ETF 持仓

纳斯达克的 ETF 持仓 API 可识别将某只股票列为前十大持仓的交易型基金(ETF)。这些数据能反映机构持仓模式,并帮助发现相关投资机会。

纳斯达克 ETF 持仓

端点:https://api.nasdaq.com/api/company/{symbol}/holdings?assetclass=stocks

示例实现:

import requests

def get_holdings_data(symbol, headers):
    url = f'https://api.nasdaq.com/api/company/{symbol}/holdings?assetclass=stocks'
    response = requests.get(url, headers=headers)
    return response.json()

headers = {
    'accept': 'application/json',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}
holdings_data = get_holdings_data('AAPL', headers)

print(holdings_data)

API 返回两类 ETF 数据:所有将该股列为前十持仓的 ETF,以及专门的纳斯达克上市 ETF。响应包含权重占比、ETF 表现与基金详情。

{
    "data": {
        "heading": "ETFs with AAPL as a Top 10 Holding*",
        "holdings": { ... },           // All ETFs with the stock as top 10 holding
        "nasdaqheading": "Nasdaq Listed ETFs where AAPL is a top 10 holding*",
        "nasdaqHoldings": { ... }      // Specifically NASDAQ-listed ETFs
    }
}

公司最新新闻

该端点获取与特定股票代码相关的最新新闻。返回包含标题、发布时间、相关标的与文章元数据的详细报道。

纳斯达克最新新闻

端点:https://www.nasdaq.com/api/news/topic/articlebysymbol?q={symbol}|STOCKS&offset={offset}&limit={limit}&fallback=true

需要传入:

  • q——股票代码,后缀加 |STOCKS(如 AAPL|STOCKS、MSFT|STOCKS)
  • offset——分页起始偏移(从 0 开始)
  • limit——返回的最大文章数(默认 10)
  • fallback——回退标志(建议:true)

示例实现:



import requests

def get_news_data(symbol, headers):
url = f'https://www.nasdaq.com/api/news/topic/articlebysymbol?q={symbol}|STOCKS&offset=0&limit=10&fallback=true'
response = requests.get(url, headers=headers)
return response.json()

headers = {
'accept': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
}
news_data = get_news_data('AAPL', headers)

print(news_data)

The API returns a structured JSON response that looks like this:

{
"data": {
"message": null,
"rows": [...], // Array of news articles
"totalrecords": 8905 // Total number of available articles
}
}

每篇新闻包含以下详细信息:

{
    "ago": "15 hours ago",
    "created": "Jul 26, 2025",
    "id": 25379586,
    "image": "",
    "imagedomain": "https://www.nasdaq.com/sites/acquia.prod/files",
    "primarysymbol": "tsm",
    "primarytopic": "Markets|4006",
    "publisher": "The Motley Fool",
    "related_symbols": [
        "tsm|stocks",
        "aapl|stocks",
        "nvda|stocks"
    ],
    "title": "Everyone's Watching Nvidia -- but This AI Supplier Is the Real Power Player",
    "url": "/articles/everyones-watching-nvidia-ai-supplier-real-power-player"
}

该 API 使用简单的基于 offset 的分页机制,便于在海量文章中高效导航:

  • 第一批——offset=0&limit=10 获取第 1–10 篇
  • 第二批——offset=10&limit=10 获取第 11–20 篇
  • 第三批——offset=20&limit=10 获取第 21–30 篇

获取下一批文章时,将 offset 增加等于 limit 的数量。

方法二——使用住宅代理扩展纳斯达克数据抓取

直接 API 访问适合多数用例,但当你扩展至企业级数据采集时,会遇到显著的抓取挑战。大规模操作会触发限流、反爬系统与 IP 封禁,导致采集中断。

大规模抓取的主要瓶颈是 IP 信誉管理。纳斯达克等金融网站部署高级反机器人系统,监控单个 IP 的请求模式与频率。一旦识别到自动化流量,可能实施从限流到完全封禁的不同级别拦截。

住宅代理通过将请求路由至真实家庭网络来解决上述问题,使请求看起来像分布于不同地理位置的真实用户流量,从而显著降低触发反爬系统的概率。

我们的住宅代理基础设施在 195+ 地区提供 1.5 亿+ 住宅 IP,专为企业级数据采集设计。新用户可参阅快速入门进行基础实现,企业客户如需高级配置可参考详细设置文档

使用 Python requests 配置住宅代理的步骤很少。配置示例如下:

proxies = {
    'http': 'http://brd-customer-{CUSTOMER_ID}-zone-{ZONE_NAME}:{PASSWORD}@brd.superproxy.io:{PORT}',
    'https': 'http://brd-customer-{CUSTOMER_ID}-zone-{ZONE_NAME}:{PASSWORD}@brd.superproxy.io:{PORT}'
}

完整实现:

import requests
import urllib3

# Disable SSL warnings
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

proxies = {
    "http": "http://brd-customer-{CUSTOMER_ID}-zone-{ZONE_NAME}:{PASSWORD}@brd.superproxy.io:{PORT}",
    "https": "http://brd-customer-{CUSTOMER_ID}-zone-{ZONE_NAME}:{PASSWORD}@brd.superproxy.io:{PORT}",
}

headers = {
    "accept": "application/json, text/plain, */*",
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
}

response = requests.get(
    "https://www.nasdaq.com/api/news/topic/articlebysymbol?q=AAPL|STOCKS&offset=0&limit=10&fallback=true",
    headers=headers,
    proxies=proxies,
    verify=False,
    timeout=30,
)

print(f"Status Code: {response.status_code}")
print(response.json())

采用住宅代理后,你可以在不同 IP 上并发运行成百上千个请求,而不易触发限流。

我们还提供免费开源的代理管理器,用于集中管理代理、实时监控请求、设置高级轮换等。请参阅配置指南完成设置。

方法三——基于 MCP 的 AI 驱动纳斯达克数据抓取

模型上下文协议(MCP)标准化了 AI 与数据的集成,使你能以自然语言操控抓取基础设施。Bright Data 的 MCP 实现将数据采集解决方案与 AI 驱动的提取结合,通过对话式界面简化抓取流程。

这款面向金融数据提取的 MCP 服务器基于网页数据基础设施,智能处理端点发现、请求头管理与反爬防护,能在处理 JavaScript 渲染、动态内容与安全机制的同时,输出结构化数据。

下面以对接 Claude 桌面版为例演示 Bright Data MCP 的使用。打开 Claude 桌面应用,依次进入 Settings > Developer > Edit Config。在 claude_desktop_config.json 中添加如下配置:

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "<your-brightdata-api-token>",
        "WEB_UNLOCKER_ZONE": "<optional – override default zone name 'mcp_unlocker'>",
        "BROWSER_AUTH": "<optional – enable full browser control via Scraping Browser>"
      }
    }
  }
}

配置要求:

  • API token——创建 Bright Data 账号,并从控制台生成 API Token
  • Web Unlocker 区域——指定你的 Web Unlocker 区域名,或使用默认的 mcp_unlocker
  • Scraping Browser(Browser API)配置——对于动态内容场景,请配置 Browser API 以处理 JS 渲染页面。使用 Browser API 区域“Overview”页中的 Username:Password 凭据。

完成配置后,退出并重新打开 Claude 桌面应用。你会看到 Bright Data 入口,表示 MCP 工具已集成到 Claude 环境。

Bright Data MCP 与 Claude 集成

结合 Claude 与 Bright Data MCP,你可以通过对话式提示在无需写代码的情况下完成数据提取。

示例提示:“以 JSON 格式提取该纳斯达克 URL 的关键数据:https://www.nasdaq.com/market-activity/stocks/aapl。该网站采用 JavaScript 渲染,请处理动态加载。”

Bright Data MCP JavaScript 渲染

按提示授予工具权限。系统将自动调用 Bright Data MCP 工具,利用 Browser API 处理 JS 渲染并绕过反爬保护,最终返回包含全面股票信息的结构化 JSON 数据。

纳斯达克 Bright Data MCP 提取的 JSON 输出

这只是 MCP 在金融数据提取中的一个应用。该协议具有高度通用性,团队常会组合多个 MCP 服务器以构建不同能力的 AI 工作流。

我们的顶级 MCP 服务器概览对各家能力进行比较与亮点介绍,涵盖从网页数据提取、浏览器自动化到代码集成与数据库管理等多种场景。

结论

要高效抓取纳斯达克数据,需根据具体需求选择合适方法。低量级数据抽取可用基础抓取,生产级应用则更受益于稳健的代理基础设施与企业级方案

对于需要企业级金融数据方案的组织,建议进行多方评估。我们的领先金融数据提供商分析可帮助你在自建爬虫与购买专业供应商数据集之间做出决策。

除金融数据集外,Bright Data 的数据市场还提供商业数据集社交媒体数据集房产数据集电商数据集等多种选择。

面对众多数据集与采集方案,欢迎与我们的数据专家沟通,共同确定最契合你需求的 Bright Data 产品与服务。

支持支付宝等多种支付方式

Satyam Tripathi

技术写作者

5 years experience

Satyam Tripathi 帮助 SaaS 和数据初创公司将复杂技术转化为可执行的内容,提升开发者采用度并增强用户理解。

Expertise
Python 开发者教育 技术写作