使用Python爬取TradingView股票价格时无法获取元素内容求助
问题分析与解决方案
你的代码本身没有语法错误,问题出在TradingView的股票价格是通过JavaScript动态渲染的:
- 用
requests.get()获取的是页面初始的静态HTML,此时目标<span>标签只是一个空占位符,内部的价格内容还未加载; - 页面加载完成后,浏览器会执行JavaScript,从TradingView后端接口拉取实时价格数据,再填充到对应标签中。
解决办法
方法1:使用支持JavaScript渲染的工具(模拟浏览器)
用Selenium或Playwright这类工具模拟真实浏览器加载页面,等待JavaScript执行完毕后再提取内容。示例代码(Selenium):
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 # 初始化浏览器(需提前安装对应浏览器的驱动) driver = webdriver.Chrome() driver.get('https://fr.tradingview.com/symbols/NASDAQ-AAPL/') # 等待价格元素加载完成 price_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'last-JWoJqCpY')) ) print(price_element.text) driver.quit()
方法2:直接调用TradingView的API接口(更高效)
打开浏览器开发者工具(F12),切换到「网络」标签筛选XHR请求,找到获取股票报价的接口(通常含quote或price关键词),直接用requests请求该接口拿数据,无需解析HTML。示例代码(接口需自行抓包确认):
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 示例接口(需替换为实际抓包得到的接口地址) response = requests.get('https://api.tradingview.com/v1/symbols/NASDAQ-AAPL/quote', headers=headers) data = response.json() print(data['last_price'])
内容的提问来源于stack exchange,提问作者Breeze
相关产品推荐
相关产品推荐

