Python使用Requests实现CoinMarketCap爬虫返回空记录问题求助
CoinMarketCap爬虫返回空数据解决方案
核心问题定位
- 你当前使用的
https://api.coinmarketcap.com/data-api/v3/topsearch/rank是站点热门搜索排名接口,本身返回的内容就不是全量加密货币列表,和你要爬取64页全量币种的需求不匹配。 - 缺少必要的请求头参数,站点反爬策略会拦截无合法请求头的请求,导致返回空或者异常数据。
可用实现代码
import requests import pandas as pd import time # 全量币种列表接口 url = "https://api.coinmarketcap.com/data-api/v3/cryptocurrency/listing" # 配置请求头模拟浏览器请求 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Accept": "application/json" } all_crypto_data = [] # 循环爬取1-64页数据 for page in range(1, 65): # 分页参数,默认每页100条,按市值降序排序 params = { "start": (page - 1) * 100 + 1, "limit": 100, "sortBy": "market_cap", "sortType": "desc", "convert": "USD" } try: response = requests.get(url, headers=headers, params=params, timeout=15) # 校验请求是否成功 response.raise_for_status() page_data = response.json() # 提取当前页的币种数据 crypto_list = page_data["data"]["cryptoCurrencyList"] all_crypto_data.extend(crypto_list) print(f"第{page}页爬取完成,累计获取{len(all_crypto_data)}条数据") # 增加请求间隔避免触发频率限制 time.sleep(2) except Exception as e: print(f"第{page}页爬取失败,错误信息:{str(e)}") continue # 将所有数据存入DataFrame df = pd.DataFrame(all_crypto_data) # 可打印预览前5行数据 print(df.head())
注意事项
- 如果后续站点更新接口参数或者返回结构,可以打开浏览器开发者工具的「网络」面板,重新抓取最新的listing接口配置即可
- 请控制爬取频率,避免短时间发起大量请求导致IP被站点限制
- 爬取的数据仅可用于个人学习,需遵守站点相关使用规则
内容的提问来源于stack exchange,提问作者Snyder Fox
相关产品推荐
相关产品推荐

