python - BeaitifulSoup 无法读取所有命名空间
问题描述
我有一个 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 文件。
解决方案
你可以试试这段代码(使用 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
推荐阅读
- intellij-idea - Flutter GIT项目checkout后,无法运行项目
- webpack - 如何在 vue.js 构建中重命名 index.html?
- javascript - 如何通过 jquery 显示图像预览?
- python - 使用 to_categorical 转换 np.array 时的内存问题
- amazon-web-services - 如何从 AWS ELB 记录 HTTP “referer”和“user-agent”?
- python - Python-Selenium:Chrome 无头设置不适用于“WebDriverWait”
- r - 比较 xts 索引元素
- php - Apache 中的多个日志文件使用一个配置文件
- javascript - 如何在 Angular 中编写单个 post 服务并多次动态调用它?
- c# - Visual Studio 2017 中的 CS0501 错误