我想从 SEC EDGAR API 提取报告并在 python 中进行分析。据我所知,主要问题似乎是我使用了错误的文件格式,但我发现转换为 HTML 的方法不起作用。
我在 python 方面的经验有限,对于 RESTful API 使用的经验更少。我在 SEC 网站上找到了一些有关 API 的资源,但我无法理解其中的意义。
我还尝试将响应打印到数据框中,但收到了 403 响应
这是我的代码:
import requests
import pandas as pd
import numpy as np
ticker = "AAPL"
start_date = "2022-01-01"
end_date = "2020-12-31"
sec_url = "https://www.sec.gov/cgi-bin/browse-edgar"
sec_params = {
"action": "getcompany",
"CIK": ticker,
"type": "10-k",
"dateb": start_date,
"owner": "exclude",
"count": 100
}
sec_response = requests.get(sec_url, params=sec_params)
sec_data = sec_response.json()
我收到的错误是 JSONDecodeError
问题是返回的响应不是 JSON,而是包含错误的 HTML 页面。 (您可以使用
sec_response.text
查看返回的响应)。
就您而言,SEC 要求您在请求的用户代理中包含您的公司/电子邮件。 (参见此处)
USER-AGENT 应包含在请求的标头中。要了解如何检查this StackOverflow 问题:
...
headers = {
'User-Agent': 'Sample Company Name AdminContact@<sample company domain>.com'
}
...
sec_response = requests.get(sec_url, params=sec_params, headers=headers)
您可以使用操作系统datamule包下载文件。免责声明:我是开发商。
from datamule import Downloader,
downloader = Downloader()
downloader.download(form='10-K',output_dir='10-K',date=('2001-01-01','2024-11-01'),ticker='AAPL')
根据您尝试执行的分析类型,
Filing()
类可能对您有用。它解析文件,也可以将其作为可迭代对象传递到 pandas 中。
from datamule import Filing
import pandas as pd
filing = filing(path,type)
df = pd.DataFrame(filing)