BeaitifulSoup无法读取所有名称空间

时间:2019-12-24 15:45:50

标签: python xml beautifulsoup namespaces xbrl

我有一个XBRL文档,应该是XML文档。

我试图提取按其名称空间分组的不同标签。虽然代码似乎可以与某些命名空间( us-gaap )配合使用,但对于其他命名空间( xbrli )却似乎失败。但是,在xml文件中,有许多类型为* *

的标签。

代码:

from bs4 import BeautifulSoup

with open('test.xml', 'r') as fp:
    raw_text = fp.read()

soup = BeautifulSoup(raw_text, 'xml')

print( len(soup.find_all(lambda tag: tag.prefix == 'us-gaap')) ) # print 941
print( len(soup.find_all(lambda tag: tag.prefix == 'xbrli')) ) # print 0

您可以找到test.xml file here

2 个答案:

答案 0 :(得分:1)

您可以尝试此代码(使用CSS选择器吗?)。使用您的代码,有时xbrli标记为1268,有时为0(在旧版本的bs4==4.4.1上进行了测试)。另外,您使用哪个版本的BeautifulSoup?

from bs4 import BeautifulSoup, __version__

soup = BeautifulSoup(open('data.txt', 'r').read(), 'xml')

print('xbrli:* tags =', len(soup.select('xbrli|*')))
print('us-gaap:* tags =', len(soup.select('us-gaap|*')))

print('Version of bs4:', __version__)

打印:

xbrli:* tags = 1268
us-gaap:* tags = 941
Version of bs4: 4.8.1

答案 1 :(得分:0)

使用BeautifulSoup 4.8.1解决了该问题。