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

Python Selenium爬取TradingView时部分字段返回空字符串求助

问题描述

我编写了ScrapeTech()函数爬取TradingView的股票技术数据,结果只有AMZN的lastprice和change字段能获取到有效值,GOOGL、A、V、AA这几只股票的这两个字段都返回空字符串。我试过重新复制XPATH、使用implicitly_wait()方法,但问题依然存在。

我的代码
watchlist = {"amzn", "googl", "A", "v", "AA"}

def ScrapeTech():
    PATH = "C:\\Program Files (x86)\\chromedriver.exe"
    driver = webdriver.Chrome(PATH)

    for stock in watchlist:
        driver.get("https://www.tradingview.com/symbols/" + stock + "/technicals/")

        driver.implicitly_wait(20)

        lastprice = driver.find_element_by_xpath(
            '//*[@id="js-category-content"]/div[1]/div[1]/div/div/div/div[3]/div[1]/div/div[1]/span[1]')

        change = driver.find_element_by_xpath(
            '//*[@id="js-category-content"]/div[1]/div[1]/div/div/div/div[3]/div[1]/div/div[2]')

        RSI = driver.find_element_by_xpath(
            '//*[@id="technicals-root"]/div/div[5]/div[1]/div[2]/table/tbody/tr[2]/td[2]')

        SMA50 = driver.find_element_by_xpath(
            '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[9]/td[2]')

        SMA100 = driver.find_element_by_xpath(
            '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[11]/td[2]')

        SMA200 = driver.find_element_by_xpath(
            '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[13]/td[2]')

        message = f"{stock}: {lastprice.text}, {change.text}, RSI: {RSI.text}, SMA50: {SMA50.text}, SMA100: {SMA100.text}, SMA200: {SMA200.text}"

        print(message)

    driver.quit()
输出结果
amzn: 100.34, +4.14
+4.30%, RSI: 61.00, SMA50: 96.22, SMA100: 95.09, SMA200: 108.50
A: , , RSI: 36.02, SMA50: 148.77, SMA100: 147.85, SMA200: 137.29
AA: , , RSI: 33.24, SMA50: 49.93, SMA100: 47.35, SMA200: 47.28
v: , , RSI: 38.17, SMA50: 223.10, SMA100: 214.90, SMA200: 207.68
googl: , , RSI: 62.82, SMA50: 94.54, SMA100: 94.13, SMA200: 101.88
解决方法

问题原因

  1. 绝对XPATH兼容性差:你使用的绝对XPATH仅适配AMZN的页面结构,TradingView针对不同股票的页面DOM存在细微差异,导致其他股票的lastprice和change元素无法被定位到。
  2. 等待机制不完善:implicitly_wait仅等待元素出现,但元素加载完成后文本内容可能还未渲染,直接取值会得到空字符串。

修正方案

  1. 改用通用定位方式:放弃绝对XPATH,通过元素的class属性定位,这类属性在所有股票页面保持一致。比如lastprice对应CSS选择器.tv-symbol-price-quote__value.js-symbol-last,change对应.tv-symbol-price-quote__change-value。
  2. 使用显式等待:用WebDriverWait等待元素可见且文本非空,确保数据完全渲染后再取值。

修正后的代码

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

watchlist = {"amzn", "googl", "A", "v", "AA"}

def ScrapeTech():
    PATH = "C:\\Program Files (x86)\\chromedriver.exe"
    driver = webdriver.Chrome(PATH)
    wait = WebDriverWait(driver, 20)

    for stock in watchlist:
        driver.get(f"https://www.tradingview.com/symbols/{stock}/technicals/")

        # 等待lastprice元素可见并加载完成
        lastprice = wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, ".tv-symbol-price-quote__value.js-symbol-last"))
        )
        # 等待change元素可见并加载完成
        change = wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, ".tv-symbol-price-quote__change-value"))
        )

        # 其他指标同样用显式等待确保元素加载
        RSI = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="technicals-root"]/div/div[5]/div[1]/div[2]/table/tbody/tr[2]/td[2]')))
        SMA50 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[9]/td[2]')))
        SMA100 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[11]/td[2]')))
        SMA200 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="technicals-root"]/div/div[5]/div[2]/div[2]/table/tbody/tr[13]/td[2]')))

        message = f"{stock}: {lastprice.text}, {change.text}, RSI: {RSI.text}, SMA50: {SMA50.text}, SMA100: {SMA100.text}, SMA200: {SMA200.text}"
        print(message)

    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:26