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
相关产品推荐
相关产品推荐

