如何用Python爬取经Google Tag Manager渲染的TradingView正确数据?
爬取TradingView美股收益页动态数据的解决方案
因为目标页面的表格数据是通过JavaScript动态渲染的,requests+BeautifulSoup只能拿到初始静态HTML里的错误数据,所以得用无头浏览器工具模拟真实加载过程,等JS执行完再抓数据。下面推荐两个简单的Python实现方案:
方案一:Playwright(推荐,配置简单)
Playwright是微软推出的自动化测试工具,自带浏览器驱动,上手快,适合处理动态页面。
1. 安装依赖
pip install playwright playwright install chromium # 安装无头Chromium浏览器
2. 爬取代码
from playwright.sync_api import sync_playwright import pandas as pd def get_earnings_data(): with sync_playwright() as p: # 启动无头浏览器,不弹出可视化窗口 browser = p.chromium.launch(headless=True) page = browser.new_page() # 访问目标页面,等待网络空闲(确保所有动态数据加载完成) page.goto("https://www.tradingview.com/markets/stocks-usa/earnings/", wait_until="networkidle") # 等待表格元素加载完毕 page.wait_for_selector("table.tv-data-table") # 提取表格HTML,用pandas直接转换成结构化数据 table_html = page.inner_html("table.tv-data-table") df = pd.read_html(table_html)[0] browser.close() # 将数据保存为CSV文件,也可按需做其他处理 df.to_csv("us_stocks_earnings.csv", index=False) print("数据爬取完成,已保存到us_stocks_earnings.csv") if __name__ == "__main__": get_earnings_data()
方案二:Selenium(适合熟悉该工具的用户)
如果习惯用Selenium,新版Selenium已无需手动下载ChromeDriver,可直接使用:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import pandas as pd # 配置无头模式 options = Options() options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) # 访问页面,隐式等待10秒确保元素加载 driver.get("https://www.tradingview.com/markets/stocks-usa/earnings/") driver.implicitly_wait(10) # 提取表格HTML并解析 table = driver.find_element("css selector", "table.tv-data-table") table_html = table.get_attribute("outerHTML") df = pd.read_html(table_html)[0] # 保存数据 df.to_csv("us_stocks_earnings.csv", index=False) print("数据爬取完成") driver.quit()
关键说明
- 两种方案都是模拟真实浏览器加载流程,让页面JS执行完毕后再获取数据,能拿到正确的收益表格内容。
pandas.read_html可以快速把HTML表格转成DataFrame,省去手动解析标签的繁琐步骤。- 无头模式不会弹出浏览器窗口,适合在后台或服务器环境运行。
内容的提问来源于stack exchange,提问作者BAM
相关产品推荐
相关产品推荐

