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

如何用Python Selenium抓取Canvas图形中Aavegotchi的7天日度数据?

解决Canvas图表数据抓取问题:用Python+Selenium获取Aavegotchi的日度活动数据

核心思路

别费劲解析Canvas图像——图表的数据都是前端从后端接口拉取后渲染的,直接抓原始数据源比图像识别高效100倍。DappRadar这类站点基于NUXT框架构建,页面数据会存在全局JS变量里,或者可以直接定位到加载图表的API接口。

步骤1:准备依赖

先安装必要的包:

pip install selenium webdriver-manager pandas

步骤2:用Selenium获取页面全局数据

下面是完整代码,直接抓取页面全局变量中的原始活动数据:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd

# 初始化浏览器
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # 无头模式,不需要可视化时启用
options.add_argument("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")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# 打开目标页面
url = "https://dappradar.com/polygon/games/aavegotchi"
driver.get(url)

# 等待图表区域加载完成(等待活动图表容器出现)
wait = WebDriverWait(driver, 15)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".drd-chart-container")))

# 执行JS获取NUXT全局状态里的活动数据
raw_data = driver.execute_script("return window.__NUXT__.state.dappActivity.data")

# 关闭浏览器
driver.quit()

# 解析数据:提取过去7天的日度数据
filtered_data = []
# 取数组最后7条(通常是最近7天的数据)
for entry in raw_data[-7:]:
    filtered_data.append({
        "date": entry["date"],
        "transactions": entry["transactions"],
        "volume": entry["volume"],
        "uaw": entry["uaw"]
    })

# 反转数组,让日期按从早到晚排列(可选)
filtered_data.reverse()

# 存储数据到CSV
df = pd.DataFrame(filtered_data)
df.to_csv("aavegotchi_7d_activity.csv", index=False)
print("数据已保存到aavegotchi_7d_activity.csv")

步骤3:备选方案——直接调用API

如果全局变量结构有变化,可以通过Chrome DevTools找加载数据的API接口:

  1. 打开目标页面按F12,切换到Network标签后刷新页面
  2. 搜索包含activity或history的请求,找到类似https://api.dappradar.com/dapps/xxx/activity?period=7d的接口
  3. 直接用requests请求该接口,带上必要请求头

示例代码(假设API接口已找到):

import requests
import pandas as pd

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"
}
api_url = "https://api.dappradar.com/dapps/1234/activity?period=7d"
response = requests.get(api_url, headers=headers)
data = response.json()

# 解析并保存数据
filtered_data = [{
    "date": entry["date"],
    "transactions": entry["transactions"],
    "volume": entry["volume"],
    "uaw": entry["uaw"]
} for entry in data]

df = pd.DataFrame(filtered_data)
df.to_csv("aavegotchi_7d_activity.csv", index=False)

注意事项

  • 反爬限制:DappRadar可能会拦截频繁请求,建议添加随机延迟或使用代理
  • 变量路径更新:如果window.__NUXT__.state.dappActivity.data失效,可在DevTools的Console标签输入window.__NUXT__查看最新数据路径
  • 字段匹配:确保提取的字段名和API返回一致,比如uaw可能变为uniqueActiveWallets,需根据实际返回调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:50:20