【问题标题】:Beautiful soup find gets results, however findall gets empy listBeautifulsoup find 得到结果,但是 findall 得到空列表
【发布时间】:2018-10-10 08:04:50
【问题描述】:

我正在尝试使用 Beautiful Soup 来解析 XBRL 文档(标准标记的 XML)。我试图找到标签为“iic-com:inversionesfinancierasrvcotizada”的所有元素。当我使用 find 函数时,它会返回一个结果,即所需条目中的第一个。

soup.find('iic-com:inversionesfinancierasrvcotizada')

返回 XML

<iic-com:inversionesfinancierasrvcotizada>
<iic-com:codigoisin contextref="FIM_T12018_V86902186_ia">ES0105130001</iic-com:codigoisin>
<iic-com:inversionesfinancierasdescripcion contextref="FIM_T12018_V86902186_ia">GLOBAL DOMINION ACCESS SA</iic-com:inversionesfinancierasdescripcion>
<dgi-lc-int:xcode_iso4217.eur contextref="FIM_T12018_V86902186_da">EUR</dgi-lc-int:xcode_iso4217.eur>
<iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasvalor contextref="FIM_T12018_V86902186_ia" decimals="2" unitref="euro">190490</iic-com:inversionesfinancierasvalor>
<iic-com:inversionesfinancierasporcentaje contextref="FIM_T12018_V86902186_ia" decimals="2" unitref="pure">0.10</iic-com:inversionesfinancierasporcentaje>
</iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasvalor contextref="FIM_T12018_V86902186_ipy" decimals="2" unitref="euro">185545</iic-com:inversionesfinancierasvalor>
<iic-com:inversionesfinancierasporcentaje contextref="FIM_T12018_V86902186_ipy" decimals="2" unitref="pure">0.11</iic-com:inversionesfinancierasporcentaje>
</iic-com:inversionesfinancierasimporte>
</iic-com:inversionesfinancierasrvcotizada>

但是,当我尝试 find_all 或 findAll 方法时,我希望看到此条目以及其他附加条目,但结果却是。

soup.find_all('iic-com:inversionesfinancierasrvcotizada')

产量

[]

我不知道我在这里做错了什么。

编辑:如果您想尝试完整的示例,首先您需要从here 获取文档,下载 2018 年 Trimestre 1 下的第一个 XBRL 文档。我已经下载并命名它是“trueval.XML”。然后我用来阅读的代码是:

from bs4 import BeautifulSoup as bs
import io

soup = bs(io.open("trueval.XML", encoding="ISO-8859-1"), "html.parser")

【问题讨论】:

  • 可能是特定解析器的问题。你试过other parsers吗?
  • 试试findAll而不是find_all

标签: python xml beautifulsoup


【解决方案1】:

我给出的解决方案不是一个有效的解决方案,但它应该能让你到达那里。我在脚本中使用了选择器。试一试:

from bs4 import BeautifulSoup

element = """
<iic-com:inversionesfinancierasrvcotizada>
<iic-com:codigoisin contextref="FIM_T12018_V86902186_ia">ES0105130001</iic-com:codigoisin>
<iic-com:inversionesfinancierasdescripcion contextref="FIM_T12018_V86902186_ia">GLOBAL DOMINION ACCESS SA</iic-com:inversionesfinancierasdescripcion>
<dgi-lc-int:xcode_iso4217.eur contextref="FIM_T12018_V86902186_da">EUR</dgi-lc-int:xcode_iso4217.eur>
<iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasvalor contextref="FIM_T12018_V86902186_ia" decimals="2" unitref="euro">190490</iic-com:inversionesfinancierasvalor>
<iic-com:inversionesfinancierasporcentaje contextref="FIM_T12018_V86902186_ia" decimals="2" unitref="pure">0.10</iic-com:inversionesfinancierasporcentaje>
</iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasimporte>
<iic-com:inversionesfinancierasvalor contextref="FIM_T12018_V86902186_ipy" decimals="2" unitref="euro">185545</iic-com:inversionesfinancierasvalor>
<iic-com:inversionesfinancierasporcentaje contextref="FIM_T12018_V86902186_ipy" decimals="2" unitref="pure">0.11</iic-com:inversionesfinancierasporcentaje>
</iic-com:inversionesfinancierasimporte>
</iic-com:inversionesfinancierasrvcotizada>
"""
soup = BeautifulSoup(element, 'lxml')
for item in soup.select("[contextref^='FIM_T']"):
    print(item.text)

它产生的结果:

ES0105130001
GLOBAL DOMINION ACCESS SA
EUR
190490
0.10
185545
0.11

【讨论】:

  • 您好,感谢您的回答。不幸的是,这对我不起作用,大型 XBRL 中的几乎所有元素都有这样的上下文引用。他们唯一独特的是标签名称 iic-com:inversionesfinancierasrvcotizada 它定义了每一棵小树,里面有所需的数据,因为每棵树都是一个条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多