【发布时间】:2019-06-22 22:34:30
【问题描述】:
我正在尝试编写一个脚本,该脚本将采用 CIK、报告类型和可选的截至日期,并从 SEC EDGAR 公共索引返回解析的财务报告信息。
该脚本主要工作并返回所有值的数据框,其中包含从 contextref 属性解析的描述和参考年份。不幸的是,对于不同的标签,contextref 的形式存在相当多的可变性,所以我想知道是否有一种比我目前使用一些逻辑和正则表达式更简洁的方法来提取这些信息。我检查了 xbrl 文档,它引用了一个“句点”元素,但是当我检查 tag.attrs 时没有看到它。 想知道除了一些不可靠的正则表达式之外是否有更直接的方法来提取这些信息。
如果它具有指导意义,很高兴提供更多有问题的 contextref 值的示例。
以下代码的相关部分:
import pandas as pd
from bs4 import BeautifulSoup
from requests import get
link = 'https://www.sec.gov/Archives/edgar/data/789019/000156459018019062/msft-20180630.xml'
r = get(link)
str = r.text
soup = BeautifulSoup(str, 'lxml')
tags = soup.find_all()
df = pd.DataFrame(columns=['field','period','value'])
for tag in tags:
if ('us-gaap:' in tag.name # only want gaap-related tags
and tag.text.isdigit()): # only want values, no commentary
#a = re.match("^C_"+ re.escape(cik) + "_[0-9]", tag['contextref'])
name = tag.name.split('gaap:')[1]
cref = tag['contextref'][-8:-4]
value = tag.text
df = df.append({'field': name, 'period': cref, 'value': value}, ignore_index=True)
print(df)
【问题讨论】:
-
您的代码将无法运行。您正在使用 str 作为变量名并且有一个未定义的变量 da。 没有评论是什么意思?
-
@QHarr,哎呀,无意中将 df 切换为 da。现在应该可以工作了。一些与 GAAP 相关的标签包括关于情况、市场状况等的各种评论。我只想要会计属性。
标签: python beautifulsoup xbrl