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

如何用Selenium和Python抓取表格指定列(Symbol、Name)数据

问题解决:提取纳斯达克NDX指数表格的Symbol和Name列数据

你目前的代码仅获取了表格的行元素对象集合,并未从这些元素中提取具体文本内容,同时还有几处细节需要优化,以下是完整解决方案:

核心问题说明

find_elements()返回的是WebElement对象列表,而非直接的文本数据。要拿到Symbol和Name,需要遍历每个行元素,再定位到对应列的子元素并提取文本。另外1秒的隐式等待时长过短,大概率不足以让表格完全加载完成,易导致元素定位失败。

修改后的代码

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

# 初始化浏览器(注意:ChromeDriver版本需与本地浏览器匹配)
driver = webdriver.Chrome()
url = "https://www.nasdaq.com/market-activity/quotes/nasdaq-ndx-index"
driver.get(url)

# 用显式等待确保表格完全加载,比隐式等待更可靠
wait = WebDriverWait(driver, 15)
table_rows = wait.until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, "nasdaq-ndx-index__row"))
)

# 遍历行元素,提取Symbol和Name
stock_data = []
for row in table_rows:
    try:
        # 定位Symbol列(基于页面实际CSS类名)
        symbol = row.find_element(By.CSS_SELECTOR, ".nasdaq-ndx-index__cell--symbol").text
        # 定位Name列
        name = row.find_element(By.CSS_SELECTOR, ".nasdaq-ndx-index__cell--name").text
        stock_data.append({"Symbol": symbol, "Name": name})
    except Exception:
        # 跳过表头或加载异常的行
        continue

# 输出结果
for item in stock_data:
    print(f"Symbol: {item['Symbol']}, Name: {item['Name']}")

driver.quit()

关键优化点

  • 显式等待:用WebDriverWait替代短时长的隐式等待,确保表格元素完全渲染后再操作,避免动态页面加载导致的元素丢失问题。
  • 子元素定位:在每行元素内部通过CSS选择器定位目标列,相比绝对XPath更稳定,页面结构小幅度变动时不易失效。
  • 异常处理:加入try-except跳过表头行或加载异常的行,避免程序直接崩溃。

额外补充(针对滚动加载场景)

如果表格需要下拉页面才能加载更多行,可以在遍历前添加滚动操作:

# 重复滚动3次加载更多内容(可根据实际情况调整次数)
for _ in range(3):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "nasdaq-ndx-index__row")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:30:58