如何提取Coinmarketcap历史页面__NEXT_DATA__中2021年9月5日BTC行情数据
解决方案
直接通过定位__NEXT_DATA__标签、解析JSON结构即可拿到目标数据,完整可运行代码如下:
import json import requests from bs4 import BeautifulSoup # 发起页面请求 response = requests.get('https://coinmarketcap.com/historical/20210905/') soup = BeautifulSoup(response.text, 'lxml') # 提取页面内嵌的JSON数据 next_data_script = soup.find('script', id='__NEXT_DATA__') json_data = json.loads(next_data_script.string) # 定位到历史币种列表 coin_list = json_data['props']['pageProps']['listingHistorical']['data'] # 筛选BTC的对应数据 btc_info = next(coin for coin in coin_list if coin['symbol'] == 'BTC') # 提取所需字段 circulating_supply = btc_info['circulating_supply'] btc_usd_price = btc_info['quote']['USD']['price'] btc_usd_market_cap = btc_info['quote']['USD']['market_cap'] # 输出结果 print(f"流通供应量:{circulating_supply} BTC") print(f"价格:${round(btc_usd_price, 2)}") print(f"市值:${round(btc_usd_market_cap, 2)}")
逻辑说明
- 用
find方法匹配id为__NEXT_DATA__的script标签,取.string属性即可拿到标签内的纯JSON文本,之前提取失败大概率是没有正确获取标签内的文本内容就直接解析 - 转换为Python字典后,按层级
props→pageProps→listingHistorical→data就能拿到当天所有币种的全量数据 - 遍历列表筛选出symbol为BTC的条目后,直接按结构取对应字段即可,USD计价的价格和市值都在
quote→USD节点下
内容的提问来源于stack exchange,提问作者Diop Chopra
相关产品推荐
相关产品推荐

