Python从SEC EDGAR接口获取数据后存变量为空问题排查
SEC EDGAR数据获取空列表问题排查
问题背景
从SEC EDGAR数据库获取数据,已确认接口URL有效(例如苹果公司:https://data.sec.gov/submissions/CIK0000320193.json),Python请求返回状态码200,浏览器能正常获取数据,但代码中存入变量的结果为空列表,保存到文件也为空。
错误原因
你的代码中尝试从JSON响应里提取hits字段:
filings_data = json_data.get('hits', [])
但SEC submissions接口的返回结构里不存在hits这个键。该接口的 filings 数据嵌套在filings字段下,其中recent子字段包含最新的申报记录,需要从中筛选10-K和10-Q类型的文件。
修正后的代码
获取数据的函数
import requests def get_sec_data(cik): try: endpoint = f"https://data.sec.gov/submissions/CIK{cik}.json" print("API Endpoint:", endpoint) headers = { 'User-Agent': "dom dom dom@gmail.com", 'Accept-Encoding': 'gzip, deflate' } response = requests.get(endpoint, headers=headers) if response.status_code != 200: raise Exception(f"请求失败,状态码: {response.status_code}") json_data = response.json() # 从filings.recent中提取最新的10-K和10-Q记录 recent_filings = json_data.get('filings', {}).get('recent', {}) forms = recent_filings.get('form', []) accession_numbers = recent_filings.get('accessionNumber', []) filing_dates = recent_filings.get('filingDate', []) filings_data = [] for form, acc_num, date in zip(forms, accession_numbers, filing_dates): if form in ['10-K', '10-Q']: filings_data.append({ 'form_type': form, 'accession_number': acc_num, 'filing_date': date }) return filings_data except Exception as e: raise Exception(f"错误: {str(e)}")
调用并保存数据的代码
# 替换为目标CIK,比如苹果的0000320193 cik = "0000320193" try: results = get_sec_data(cik) if not results: print("未找到10-K或10-Q类型的申报记录") else: print("成功获取SEC数据") for entry in results: print(entry) file_path = "/users/domdom/desktop/Project/test.txt" with open(file_path, 'w') as file: for entry in results: file.write(str(entry) + '\n') print(f"数据已写入: {file_path}") except Exception as e: print(e)
关键说明
- SEC的submissions接口核心数据都在
filings节点下,需按照实际结构提取内容 - 必须严格遵守API的User-Agent要求(提供有效的邮箱),否则可能被限制访问
内容的提问来源于stack exchange,提问作者dom
相关产品推荐
相关产品推荐

