如何遍历Pandas DataFrame每行批量调用API获取合约部署者信息
批量查询智能合约创建者地址的最优实现
针对1000条量级的CSV合约地址查询需求,核心要兼顾运行稳定性、异常容错、避免触发API限流,不建议直接裸写无处理的循环请求,最优实现逻辑如下:
- 提前抽离公共请求配置(请求头、API基础路径),避免循环内重复定义冗余参数
- 封装独立的单地址查询方法,内置超时、异常捕获逻辑,单条地址查询失败不会中断整个批量任务
- 遍历查询时增加轻量延时、失败重试机制,避免触发接口限流规则
- 查询结果直接写回原DataFrame对应列,方便后续直接导出留存
完整实现代码
import pandas as pd import requests import time import random # Python3.10以下版本放开下面这行导入,替换返回值类型标注 # from typing import Optional # -------------------------- 配置项 -------------------------- API_BASE = "https://contract-api.dev/contracts/" REQ_HEADERS = { 'CF-Access-Client-Id': 'xxxxxx.access', 'CF-Access-Client-Secret': 'xxxxx' } REQ_TIMEOUT = 10 # 单条请求超时时间,单位秒 RETRY_TIMES = 2 # 单条请求失败重试次数 REQ_DELAY = (0.2, 0.8) # 每次请求间隔随机延时范围,单位秒,防限流 # ----------------------------------------------------------- def get_creator(contract_address: str): # Python3.10以下版本用下面这行函数定义 # def get_creator(contract_address: str) -> Optional[str]: """单条合约地址查询创建者,带重试和异常捕获""" for _ in range(RETRY_TIMES + 1): try: resp = requests.get( f"{API_BASE}{contract_address}", headers=REQ_HEADERS, timeout=REQ_TIMEOUT ) resp.raise_for_status() # 自动抛出4xx/5xx状态码错误 data = resp.json() return data['deployment']['created_by_user'] except Exception as e: print(f"地址{contract_address}查询失败,错误信息:{str(e)},准备重试...") time.sleep(random.uniform(*REQ_DELAY)) print(f"地址{contract_address}重试{RETRY_TIMES}次后仍查询失败") return None if __name__ == "__main__": # 读取本地存储合约地址的CSV文件 df = pd.read_csv("你的合约地址文件路径.csv") # 逐行查询,结果写入新列 df['created_by_user'] = df['Address'].apply(get_creator) # 最终结果保存回CSV df.to_csv("带创建者信息的合约地址结果.csv", index=False, encoding='utf-8-sig')
方案说明
- 选择
pandas.Series.apply而非手动遍历iterrows:apply针对列操作做了底层优化,比手写逐行索引循环的执行效率更高,代码可读性也更好,1000条数据的遍历开销可以忽略不计 - 默认采用串行查询而非高并发:1000条请求哪怕加上随机延时,总耗时也在10分钟以内,盲目开多线程/协程高并发很容易触发Cloudflare访问拦截、API限流规则,反而会大幅提升请求失败率
- 异常处理覆盖网络超时、接口返回错误、字段缺失三类最常见的失败场景,失败条目会在结果列标记为
None,后续可以单独筛出失败条目补查,不会因为单条坏数据中断整个任务 - 随机延时用于模拟真实访问的请求间隔,避免被CF风控识别为恶意爬虫拦截
如果确认目标API没有限流规则、允许高并发访问,可以替换为
aiohttp+asyncio的异步请求实现,1000条请求总耗时可以压缩到1分钟以内,但非必要不优先使用,稳定跑通任务优先级最高。
内容的提问来源于stack exchange,提问作者Wil
相关产品推荐
相关产品推荐

