Чтение xbrl с python
Я пытаюсь найти определенный тег в файле xbrl. Первоначально я пытался использовать пакет python-xbrl, но это не совсем то, что я хочу, поэтому я основал свой код на том, который доступен из пакета.
Вот та часть xbrl, которая мне интересна
<us-gaap:LiabilitiesCurrent contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_24">65285000000</us-gaap:LiabilitiesCurrent>
<us-gaap:Liabilities contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_28">147474000000</us-gaap:Liabilities>
Вот код
python-xbrl
пакет основан на beautifulsoup4
и несколько других пакетов.
liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities)",
re.IGNORECASE | re.MULTILINE))
Я получаю значение для us-gaap:LiabilitiesCurrent
, но я хочу ценность для us-gaap:Liabilities
, Прямо сейчас, как только он найдет совпадение, сохранит его. Но во многих случаях это неправильное совпадение из-за формата тега в xbrl. Я считаю, что мне нужно изменить re.compile()
часть, чтобы заставить его работать правильно.
2 ответа
Попробуйте это с $
знак доллара в конце указывает на то, что он не соответствует чему-либо еще после знака доллара:
liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities$)",
re.IGNORECASE | re.MULTILINE))
Я бы очень осторожно использовал этот подход для разбора XBRL (или любого XML с пространствами имен в нем). "us-gaap: пассивы" - это QName, состоящее из префикса ("us-gaap") и локального имени ("пассивы"). Префикс - это просто сокращение для полного URI пространства имен, такого как " http://fasb.org/us-gaap/2015-01-31", который определяется объявлением пространства имен, обычно в верхней части документа. Если вы посмотрите на верхнюю часть документа, вы увидите что-то вроде:
XMLNS: нам ГААП = "http://fasb.org/us-gaap/2015-01-31"
Это означает, что в рамках этого документа "us-gaap" означает полный URI пространства имен.
Создатели XML могут использовать любые префиксы по своему усмотрению, поэтому нет гарантии, что этот элемент будет называться "us-gaap:Liability" во всех встречающихся вами документах.
Beautifulsoup4 имеет очень ограниченную поддержку пространств имен, поэтому я бы не рекомендовал ее в качестве отправной точки для построения процессора XBRL. Возможно, стоит взглянуть на проект Arelle, который является полноценным процессором XBRL и облегчит выполнение других задач, таких как поиск меток и другой информации, связанной с фактами в таксономии.