如何在 python 中解析来自 EDGAR API 的 10-Q 报告?

How to parse 10-Q reports from EDGAR API in python?

我正在尝试使用 EDGAR API 检索任何给定公司的 10-Q(对应于提供的 CIK 值)。此代码检索特斯拉的最新 10-Q。这个对象附加了大约 30 个方法,例如键、值、项和 text_content。 Text_content 似乎是唯一一个不 return 空列表 [] 的列表。但是,文本不容易解析,因为 10-Q 因公司而异。

无疑会有人评论:我为什么要设置no_of_documents=2?如果此参数设置为 1,则将 returned 错误文档(不是 10-Q)。对于任何超过 1 的参数,将检索实际的 10-Q。我不知道为什么 API 会这样。

from edgar import Company
def func(cik):
    company = Company("",cik)
    tree = company.get_all_filings(filing_type="10-Q")        
    documents = Company.get_documents(tree,no_of_documents=2)
    return documents[0]
    
test = func('0001318605')

我想做的是 (A) 打印出原始 XML 以查看其底层结构,然后使用 xmltodictxml.etree.ElementTree 进行解析。但是,我收到以下错误。

使用 ET

import xml.etree.ElementTree as ET
ET.parse(test)
>>>
TypeError: expected str, bytes or os.PathLike object, not HtmlElement

使用 XMLtoDict

import xmltodict
xmltodict.parse(test)
TypeError: a bytes-like object is required, not 'HtmlElement'

同样,我的目标是搜索导航 XML 内容,但是,由于不知道标签是什么,我有点卡住了。我该如何继续?

您不需要解析test;您可以直接在其上使用 xpath 方法。例如:

test.xpath('//entity/segment/explicitmember/text()')

输出:

 'tsla:OperatingLeaseVehiclesMember',
 'tsla:OperatingLeaseVehiclesMember',
 'tsla:SolarEnergySystemsMember',
 'tsla:SolarEnergySystemsMember',
 'tsla:AutomotiveSegmentMember',
 'tsla:AutomotiveSegmentMember',

等 和

test.xpath('//context/period/instant/text()')

输出:

 ['2020-07-20',
 '2020-06-30',
 '2019-12-31',
 '2020-06-30',
 '2019-12-31',

等等。

祝你好运;解析 xbrl 文件不是一件容易的事...