BeaitifulSoup 无法读取所有命名空间
BeaitifulSoup can't read all the namespaces
我有一份 XBRL 文档,应该是 XML 文档。
我正在尝试提取按命名空间分组的不同标签。虽然该代码似乎适用于某些名称空间 (us-gaap),但它似乎无法用于其他名称空间 (xbrli)。但是,在 xml 文件中有很多 * < xbrli: ... >*
类型的标签
代码:
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.
你能试试这段代码吗(使用 CSS 选择器?)。使用您的代码,我有时会得到 1268 个 xbrli 标签,有时会得到 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
使用 BeautifulSoup 4.8.1 解决了这个问题。
我有一份 XBRL 文档,应该是 XML 文档。
我正在尝试提取按命名空间分组的不同标签。虽然该代码似乎适用于某些名称空间 (us-gaap),但它似乎无法用于其他名称空间 (xbrli)。但是,在 xml 文件中有很多 * < xbrli: ... >*
类型的标签代码:
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.
你能试试这段代码吗(使用 CSS 选择器?)。使用您的代码,我有时会得到 1268 个 xbrli 标签,有时会得到 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
使用 BeautifulSoup 4.8.1 解决了这个问题。