如何通过Python调用spacresearch API获取页面全部上市公司信息
问题解决指南
一、JSONDecodeError报错解决方法
触发该报错的核心原因有两个:
- 传参错误:你调用接口时传入的是公司全称
Magnum Opus Acq Ltd,但接口要求传入的是root_symbol(股票类短标识),比如官方示例里的ANZUU,传错参数会导致接口返回非JSON格式的错误内容,无法解析。 - 未做请求合法性校验:如果接口返回401(密钥错误)、429(请求超限)、500(服务端错误)等异常状态,返回内容不是JSON格式,直接调用
.json()方法就会触发该报错。
你可以先修改基础请求函数,增加异常处理逻辑:
import requests import time YOUR_API_TOKEN = "替换为你的实际API密钥" def get_company(root_symbol): end_point = f"https://www.spacresearch.com/api/v1/company/{root_symbol}" token = f"Bearer {YOUR_API_TOKEN}" headers = {"Authorization": token} try: resp = requests.get(end_point, headers=headers, timeout=10) # 先判断请求状态是否正常 resp.raise_for_status() # 状态正常再尝试解析JSON return resp.json() except requests.exceptions.RequestException as e: print(f"请求{root_symbol}失败:{str(e)},前100位响应内容:{resp.text[:100]}") return None
二、批量查询实现方案
按以下步骤操作即可实现全量数据拉取:
- 提前清洗请求参数
爬取live-deal页面时不要提取公司全称,直接提取每个SPAC对应的root_symbol字段,通常页面链接参数、元素的data-symbol属性中存储的就是该值,确保你拿到的标识列表全部是类似ANZUU的短标识,没有带空格、特殊符号的公司全称。 - 增加限流重试逻辑批量请求
避免短时间请求过多被接口封禁,建议每次请求后暂停1-2秒,同时对失败请求可以增加1-2次重试,批量请求示例:
# 替换为你爬取清洗后的真实root_symbol列表 root_symbol_list = ["ANZUU", "XXX", "YYY"] all_company_data = [] for idx, symbol in enumerate(root_symbol_list): print(f"正在处理第{idx+1}/{len(root_symbol_list)}个标识:{symbol}") data = get_company(symbol) if data: all_company_data.append(data) # 控制请求频率,避免触发接口限流规则 time.sleep(1.5) # 批量拉取完成后可将结果存储到本地文件 import json with open("all_spac_company_data.json", "w", encoding="utf-8") as f: json.dump(all_company_data, f, ensure_ascii=False, indent=2)
注意事项
- 提前确认你的API套餐权限,部分套餐有总请求量、单分钟请求量上限,超过限制会被接口拒绝返回数据
- 爬取得到的root_symbol列表可以先做去重、空值清洗,减少无效请求
内容的提问来源于stack exchange,提问作者technophile_3
相关产品推荐
相关产品推荐

