原来,标记名应该是:"ix:NONFRATION"

这不管用.没有找到"xi"标签.

from bs4 import BeautifulSoup

text = """
<td style="BORDER-BOTTOM:0.75pt solid #7f7f7f;white-space:nowrap;vertical-align:bottom;text-align:right;">$ <ix:nonfraction name="ecd:AveragePrice" contextref="P01_01_2022To12_31_2022" unitref="Unit_USD" decimals="2" scale="0" format="ixt:num-dot-decimal">97.88</ix:nonfraction>
</td>
"""

soup = BeautifulSoup(text, 'lxml')
print(soup)
ix_tags = soup.find_all('ix')
print(ix_tags)

但下面的工作.我看不出有什么区别.为什么会这样?多谢了!

html_content = """
<html>
  <body>
    <ix>Tag 1</ix>
    <ix>Tag 2</ix>
    <ix>Tag 3</ix>
    <p>Not an ix tag</p>
  </body>
</html>
"""

soup = BeautifulSoup(html_content, 'lxml')
ix_tags = soup.find_all('ix')
for tag in ix_tags:
    print(tag.text)

推荐答案

这里的问题来自BeautifulSoup如何处理像<ix:nonfraction>这样的命名空间标签.使用lxml解析器,可能无法正确解析或识别命名空间标记.

在您提供的XML中,ix是元素的名称空间,nonfraction是元素的本地名称.在XML中,命名空间是一种通过区分XML文档中的元素或属性来避免名称冲突的方法.ix:nonfraction标记表示nonfraction元素是ix命名空间的一部分.

要在使用lxml解析器时正确地找到像<ix:nonfraction>这样的命名空间标记,您应该在find_all调用中使用准确的标记名:

ix_tags = soup.find_all('ix:nonfraction')

如果您希望在不提供命名空间的情况下查找标记,那么可以使用xml解析器,它可以更优雅地处理命名空间标记.

soup = BeautifulSoup(text, 'xml')
ix_tags = soup.find_all('nonfraction')

样例运行:

from bs4 import BeautifulSoup

text = """
<td style="BORDER-BOTTOM:0.75pt solid #7f7f7f;white-space:nowrap;vertical-align:bottom;text-align:right;">$ <ix:nonfraction name="ecd:AveragePrice" contextref="P01_01_2022To12_31_2022" unitref="Unit_USD" decimals="2" scale="0" format="ixt:num-dot-decimal">97.88</ix:nonfraction>
</td>
"""

soup = BeautifulSoup(text, 'lxml')
ix_tags = soup.find_all('ix:nonfraction')
print(ix_tags)


soup = BeautifulSoup(text, 'xml')
ix_tags = soup.find_all('nonfraction')
print(ix_tags)

输出:

[<ix:nonfraction contextref="P01_01_2022To12_31_2022" decimals="2" format="ixt:num-dot-decimal" name="ecd:AveragePrice" scale="0" unitref="Unit_USD">97.88</ix:nonfraction>]
[<nonfraction contextref="P01_01_2022To12_31_2022" decimals="2" format="ixt:num-dot-decimal" name="ecd:AveragePrice" scale="0" unitref="Unit_USD">97.88</nonfraction>]

Python相关问答推荐

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

Python:MultiIndex Dataframe到类似json的字典列表

Django注释:将时差转换为小数或小数

如何在Python中增量更新DF

使用Beautiful Soup获取第二个srcset属性

有什么方法可以避免使用许多if陈述

Python中的负前瞻性regex遇到麻烦

通过优化空间在Python中的饼图中添加标签

Polars LazyFrame在收集后未返回指定的模式顺序

将特定列信息移动到当前行下的新行

可变参数数量的重载类型(args或kwargs)

发生异常:TclMessage命令名称无效.!listbox"

在线条上绘制表面

将9个3x3矩阵按特定顺序排列成9x9矩阵

让函数调用方程

如何更改groupby作用域以找到满足掩码条件的第一个值?

跳过嵌套JSON中的级别并转换为Pandas Rame

关于两个表达式的区别

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性: