在 python 中从 SEC EDGAR API 访问归档数据

问题描述 投票:0回答:2

我想从 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

python api edgar
2个回答
1
投票

问题是返回的响应不是 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)

0
投票

您可以使用操作系统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)

Parsed 10-K

© www.soinside.com 2019 - 2024. All rights reserved.