API返回JSON转Pandas DataFrame:提取result字段存为CSV遇阻
解决Etherscan API返回结果转CSV的问题
我来帮你搞定这个提取result字段并转CSV的问题!咱们先排查可能的坑点,再一步步修正代码:
常见问题&解决方案
1. 先修正URL里的转义字符
你代码里的URL用了&,这是HTML转义字符,实际请求时要换成&,不然Etherscan API可能解析错误,返回非预期结果。
2. 完善响应处理流程
你的代码只完成了请求步骤,缺少JSON解析、请求状态检查和字段有效性验证,这很容易导致提取失败。下面是完整的可运行代码:
import requests import pandas as pd import json # 替换成你的完整API地址,记得加上API Key(Etherscan要求必填,否则会限流或报错) api_url = "http://api.etherscan.io/api?module=account&action=txlist&address=0xddb...&apikey=你的API密钥" # 发送请求并处理响应 response = requests.get(api_url) # 先检查请求是否成功 if response.status_code == 200: # 解析JSON格式的返回数据 api_data = response.json() # 检查是否存在result字段 if "result" in api_data: result_content = api_data["result"] # 确认result是交易列表(正常返回是列表,错误时可能是字符串) if isinstance(result_content, list): # 把列表转成DataFrame tx_df = pd.DataFrame(result_content) # 保存为CSV,index=False去掉默认索引列 tx_df.to_csv("etherscan_transactions.csv", index=False) print("交易数据已成功保存为CSV文件!") else: print(f"API返回的result不是交易列表,而是:{result_content},可能是请求错误(比如API Key无效、地址格式不对)") else: print(f"API返回中没有找到result字段,完整返回内容:{json.dumps(api_data, indent=2)}") else: print(f"请求失败,HTTP状态码:{response.status_code}")
3. 关键提醒:Etherscan API必须加API Key
免费版API Key可以在Etherscan官网申请,不加的话很快会触发限流,返回错误信息(比如Max rate limit reached),这时候result字段会是错误字符串而非交易列表,自然转不成DataFrame。
4. 排查返回结构(调试用)
如果还是有问题,先打印完整的返回数据,确认result字段的位置和类型:
print(json.dumps(api_data, indent=2))
这样能直观看到JSON结构,避免因为特殊返回格式(比如嵌套结构)导致提取错误。
内容的提问来源于stack exchange,提问作者Merdok
相关产品推荐
相关产品推荐

