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

如何抓取TradingView动态生成的BTCUSD技术页内容并保存为文本文件?

问题:抓取TradingView动态生成的BTC技术指标内容

我想把https://www.tradingview.com/symbols/BTCUSD/technicals/页面保存为文本文件,但该页面内容依赖按钮动态生成(比如点击“1 minute”按钮会切换内容)。我写了以下代码:

import requests
from bs4 import BeautifulSoup
results = requests.get("https://www.tradingview.com/symbols/BTCUSD/technicals/")
src = results.content
soup = BeautifulSoup(src)

var = soup.find_all()

with open('readme.txt', 'w') as f:
    f.write(str(var))

这段代码只能抓取页面静态源码,拿不到动态生成的内容,现在卡在抓取动态内容的第一步,需要帮助,后续还要提取“buy”“sell”这类关键词。


解决方案

你的代码拿不到动态内容是因为requests只能获取服务器返回的静态HTML,而页面上的技术指标是浏览器执行JavaScript后才生成的。要抓取这类动态内容,得用能模拟浏览器运行JS的工具,下面给两种实用方案:

方案1:用Selenium实现

Selenium可以模拟真实浏览器的操作,等待页面动态加载完成后再抓取内容。

  1. 先安装依赖:pip install selenium,然后下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配)
  2. 示例代码:
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
import time

# 初始化Chrome浏览器(如果驱动没在环境变量里,要指定executable_path参数)
driver = webdriver.Chrome()
driver.get("https://www.tradingview.com/symbols/BTCUSD/technicals/")

# 等待页面加载出1分钟按钮,确保动态内容开始加载
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//button[contains(text(), '1 minute')]"))
    )
    # 点击切换到1分钟周期的技术指标
    driver.find_element(By.XPATH, "//button[contains(text(), '1 minute')]").click()
    time.sleep(2)  # 给点时间让内容更新

    # 获取渲染完成后的页面源码
    page_source = driver.page_source

    # 保存到文本文件
    with open('tradingview_btc_tech.txt', 'w', encoding='utf-8') as f:
        f.write(page_source)

    # 后续提取buy/sell关键词可以这样做(需要导入BeautifulSoup)
    # from bs4 import BeautifulSoup
    # soup = BeautifulSoup(page_source, 'html.parser')
    # buy_texts = soup.find_all(text=lambda t: t and 'buy' in t.lower())
    # 自行处理提取到的内容

finally:
    # 不管成功失败都关闭浏览器
    driver.quit()

方案2:用Playwright实现(更省心)

Playwright是新一代的浏览器自动化工具,会自动管理浏览器驱动,代码更简洁。

  1. 安装依赖:pip install playwright,然后运行playwright install自动安装浏览器
  2. 示例代码:
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动Chrome浏览器,headless=False可以看到操作过程,改成True就能后台运行
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://www.tradingview.com/symbols/BTCUSD/technicals/")
    
    # 等待1分钟按钮出现,然后点击切换
    page.wait_for_selector("button:text('1 minute')")
    page.click("button:text('1 minute')")
    page.wait_for_timeout(2000)  # 等待内容加载完成
    
    # 获取完整的页面内容
    content = page.content()
    
    # 保存到文件
    with open('tradingview_btc_tech.txt', 'w', encoding='utf-8') as f:
        f.write(content)
    
    # 后续提取关键词示例
    # from bs4 import BeautifulSoup
    # soup = BeautifulSoup(content, 'html.parser')
    # sell_elements = soup.find_all(class_=lambda c: c and 'sell' in c.lower())
    
    browser.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:35:28