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

如何用Python提取交互式图表动态数据?已试Selenium+BeautifulSoup

提取Investidor10资产演化图表数据的Python方案

针对你遇到的图表数据需点击才显示、静态解析无法提取的问题,以下两个Python方案可以解决:

方案一:用Selenium模拟交互提取

既然点击柱状图才会弹出数据,直接用Selenium模拟点击操作,然后提取弹窗内容即可,步骤如下:

  1. 初始化Selenium浏览器,加载目标页面
  2. 等待图表元素加载完成
  3. 定位所有柱状图的可点击元素
  4. 逐个点击,提取弹窗中的资产价值、资本收益、投资金额
  5. 整理并保存数据

示例代码:

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浏览器(需提前配置好chromedriver)
driver = webdriver.Chrome()
driver.get("https://investidor10.com.br/carteira/572422/")

try:
    # 等待图表加载,等待第一个柱状图元素出现
    wait = WebDriverWait(driver, 15)
    bars = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "highcharts-point")))
    
    data_list = []
    for bar in bars:
        # 用JS点击避免元素遮挡问题
        driver.execute_script("arguments[0].click();", bar)
        time.sleep(0.5)  # 等待弹窗渲染
        
        # 提取弹窗数据,需根据页面实际元素结构调整选择器
        try:
            tooltip_texts = driver.find_elements(By.CSS_SELECTOR, ".highcharts-tooltip span")
            if len(tooltip_texts) >=3:
                data_list.append({
                    "资产价值": tooltip_texts[0].text,
                    "资本收益": tooltip_texts[1].text,
                    "投资金额": tooltip_texts[2].text
                })
        except Exception as e:
            print(f"单条数据提取失败: {e}")
            continue

    # 输出提取结果
    for idx, item in enumerate(data_list, 1):
        print(f"第{idx}条数据: {item}")

finally:
    driver.quit()

注意:需要用浏览器开发者工具查看页面实际的元素class、CSS选择器,调整代码中的定位规则,确保能准确抓取弹窗内容。

方案二:抓取后台API接口(更高效)

图表数据通常通过AJAX请求从后端API获取,直接抓这个接口比模拟点击更高效:

  1. 打开浏览器开发者工具(F12),切换到「网络」标签
  2. 刷新页面,筛选「XHR」或「Fetch」请求,找到包含图表数据的接口(关键词通常是evolution、history、chart)
  3. 复制该接口的URL、请求头和参数
  4. 用requests库发送请求,解析返回的JSON数据

示例代码:

import requests

# 替换为你找到的实际API接口URL
api_url = "https://investidor10.com.br/api/carteira/evolution/572422"

# 构造请求头,至少保留User-Agent,若需登录则添加Cookie
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    # 若网站需要登录验证,复制浏览器中的Cookie填入:"Cookie": "你的cookie内容;"
}

# 发送请求并解析数据
response = requests.get(api_url, headers=headers)
data = response.json()

# 根据API返回的JSON结构解析数据
data_list = []
for entry in data.get("data", []):
    data_list.append({
        "日期": entry.get("date"),
        "资产价值": entry.get("valor_carteira"),
        "资本收益": entry.get("rendimento"),
        "投资金额": entry.get("aporte_total")
    })

# 输出结果
for item in data_list:
    print(item)

这个方案的关键是找到正确的API接口,你可以在浏览器网络请求列表中逐一排查,找到返回包含日期、资产数值的JSON数据的请求即可。如果接口需要登录态,直接复制浏览器中的Cookie到请求头即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:46:10