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

REST API爬取遇KeyError:如何提取soup中的data1d数据?

解决CEX.io API数据提取的KeyError问题

嘿,我一眼就看出问题出在哪了——你用错工具啦!CEX.io的这个API返回的是JSON格式数据,不是HTML,所以用BeautifulSoup来解析完全是走错路啦,这才导致了KeyError: 'data1d'。

问题根源

你看,当你用requests.get(url)拿到响应后,page.text是一串JSON字符串,里面确实有data1d字段,但BeautifulSoup是用来解析HTML/XML标签的,它根本认不出JSON里的字段,所以你用soup("data1d")自然找不到东西,反而报错。

正确的解决方案

直接用requests自带的JSON解析功能就行,完全不需要BeautifulSoup。下面是修正后的代码:

import json
from pprint import pprint
import sqlite3
import datetime
import requests

url = "https://cex.io/api/ohlcv/hd/20180125/BTC/USD"
headers = {'User-Agent':'Mozilla/5.0'}
page = requests.get(url, headers=headers)

# 直接解析JSON响应为Python字典
api_data = page.json()

# 提取data1d字段,用get方法更安全(避免字段不存在时直接报错)
data1d = api_data.get("data1d")

# 打印验证结果
pprint(data1d)

额外说明

  • page.json()会自动把API返回的JSON字符串转换成Python字典,这样你就能通过键名直接访问对应数据了。
  • 用.get("data1d")替代直接api_data["data1d"]的好处是:如果API返回里意外没有这个字段,代码不会直接抛出异常,而是返回None,容错性更强。
  • 拿到data1d数据后,你就可以直接遍历处理,或者存入SQLite数据库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:27:42