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

Python GET请求仅返回[],无法抓取CoinMarketCap市值问题求助

解决CoinMarketCap市值数据抓取返回空列表的问题

看起来你遇到的是现在爬虫很常见的问题——CoinMarketCap这类网站的核心数据(比如市值)是通过JavaScript动态渲染出来的,而requests.get()只能拿到页面的静态HTML源码,那些需要加载的动态数据根本不在这个静态源码里。另外你用的CSS类名.sc-12ja2s9-0 dzHJPm是网站动态生成的,这类随机类名会频繁变化,就算静态页面里曾有过对应内容,过不了多久也会失效。

下面给你两种靠谱的解决思路:

方法一:使用CoinMarketCap官方API(最推荐)

官方API是最稳定的方案,不会因为网页结构变动而失效,而且返回的数据格式规范,处理起来更省心。免费版就能获取基础的市值数据,你只需要去官网免费注册获取API密钥即可。

示例代码:

import requests

# 替换成你自己的API密钥,去CoinMarketCap官网免费注册获取
API_KEY = "你的专属API密钥"
url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"

headers = {
    "Accepts": "application/json",
    "X-CMC_PRO_API_KEY": API_KEY,
}

# 可自定义参数:比如获取前10个币种的市值,以USD计价
params = {
    "start": "1",
    "limit": "10",
    "convert": "USD"
}

response = requests.get(url, headers=headers, params=params)
data = response.json()

# 提取并保存市值数据
with open("/Users/user/Desktop/coincap.txt", mode="w+") as f:
    for crypto in data["data"]:
        market_cap = crypto['quote']['USD']['market_cap']
        line = f"{crypto['name']} ({crypto['symbol']}): 市值 ${market_cap:,.2f}\n"
        f.write(line)

print("市值数据已成功保存到本地文件!")

方法二:用Selenium模拟浏览器抓取动态内容

如果不想用API,需要模拟真实浏览器加载整个页面(包括执行JS渲染动态内容),可以用Selenium工具。

首先安装依赖:

pip install selenium

还要下载对应浏览器的驱动(比如ChromeDriver),确保驱动版本和你的浏览器版本匹配。

示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import time

# 替换成你的ChromeDriver文件路径
driver_path = "/path/to/your/chromedriver"
service = Service(driver_path)
driver = webdriver.Chrome(service=service)

# 打开目标页面
driver.get("https://www.coinmarketcap.com/charts/")
# 等待页面完全加载(根据你的网络情况调整等待时间)
time.sleep(5)

# 获取渲染完成后的完整页面源码
source = driver.page_source
soup = BeautifulSoup(source, "lxml")

# 注意:这里用更稳定的属性定位(比如data-sort属性),避免依赖动态类名
coincap_elements = soup.select("[data-sort='marketCap']")

# 保存数据到文件
with open("/Users/user/Desktop/coincap.txt", mode="w+") as f:
    for elem in coincap_elements:
        f.write(elem.get_text(strip=True) + "\n")

# 关闭浏览器
driver.quit()
print("数据已成功保存!")

额外提醒:

  • 不要频繁、无间隔地请求网站,避免被封禁IP,建议加上请求间隔或者使用代理。
  • 尽量避免依赖动态生成的类名,优先用元素的data-*属性、固定标签结构或者文本特征来定位内容。

内容的提问来源于stack exchange,提问作者fletcher.l.collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:37:32