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

Python通过URL拉取数据遇JSONDecodeError,如何获取地址交易表格数据?

问题原因

你调用response.json()报错是因为请求的Etherscan地址页面返回的是HTML网页内容,不是JSON格式数据,自然无法解析成JSON。

解决方法

下面提供两种可行方案,优先推荐第二种(API方式更稳定):

方案一:网页解析提取表格(用BeautifulSoup + Pandas)

直接解析页面中的代币交易表格,转为DataFrame:

import requests
from bs4 import BeautifulSoup
import pandas as pd

wallet_addresses = ['0x7abe0ce388281d2acf297cb089caef3819b13448', '0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94',
                    '0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2']

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

for address in wallet_addresses:
    url = f'https://etherscan.io/address/{address}#tokentxns'
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 定位代币交易表格(页面中id为'tokentxns'的表格)
    token_table = soup.find('table', id='tokentxns')
    
    # 用Pandas直接读取表格转为DataFrame
    df = pd.read_html(str(token_table))[0]
    print(f"地址 {address} 的交易记录:")
    print(df)
    # 可将DataFrame转为JSON:df.to_json(orient='records')

注意:这种方法依赖Etherscan页面的HTML结构,若页面更新可能会失效。

方案二:使用Etherscan官方API(推荐)

通过官方API直接获取结构化的JSON数据,更稳定可靠:

  1. 先去Etherscan官网免费申请一个API密钥
  2. 调用代币交易查询接口,代码示例:
import requests
import pandas as pd

API_KEY = '你的API密钥'  # 替换成你自己的密钥
wallet_addresses = ['0x7abe0ce388281d2acf297cb089caef3819b13448', '0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94',
                    '0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2']

for address in wallet_addresses:
    # 构造API请求URL,查询代币交易记录
    url = f'https://api.etherscan.io/api?module=account&action=tokentx&address={address}&startblock=0&endblock=99999999&sort=desc&apikey={API_KEY}'
    response = requests.get(url)
    data = response.json()
    
    # 提取交易数据转为DataFrame
    if data['status'] == '1':
        df = pd.DataFrame(data['result'])
        print(f"地址 {address} 的交易记录:")
        print(df)
        # 可将DataFrame转为JSON:df.to_json(orient='records')
    else:
        print(f"地址 {address} 查询失败:{data['message']}")

优势:API返回标准JSON,结构稳定,还支持分页、排序等更多参数,避免网页解析的不确定性。

内容的提问来源于stack exchange,提问作者MathMan 99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:45:35