【问题标题】:BeautifulSoup: Query namespace in XML [duplicate]BeautifulSoup:在 XML 中查询命名空间 [重复]
【发布时间】:2019-05-20 05:45:45
【问题描述】:

我有一个自定义命名空间的 XML 文档:

<parent>
 <c1:doc>
   <c1:attr_a></c1:attr_a>
   <c1:attr_b></c1:attr_b>
 </c1:doc>
 <c2:doc>
   <c2:attr_a></c2:attr_a>
   <c2:attr_b></c2:attr_b>
  </c2:doc>
</parent>

是否可以在 Python 的 BeautifulSoup 中查询此文档中所有 attr_a 属性的值?

我可以用原始字符串操作遍历树或以非常繁琐的方式遍历父级的子级,但是是否可以更直接地查询soup.find_all('*.attr_a') 或类似的?任何建议将不胜感激。

【问题讨论】:

  • 这种关系是否保持不变,即父母中孩子的第一个孩子?
  • @QHarr 可惜关系不稳定
  • 你已经得到我的下一个建议 +

标签: python xml parsing beautifulsoup namespaces


【解决方案1】:

啊哈,显然可以使用正则表达式来完成这项任务。来自docs

如果你传入一个正则表达式对象,Beautiful Soup 会过滤 使用其 search() 方法针对该正则表达式。这段代码 查找名称以字母“b”开头的所有标签;在这 案例、标签和标签:

html_doc = """
<parent>
 <c1:doc>
   <c1:attr_a></c1:attr_a>
   <c1:attr_b></c1:attr_b>
 </c1:doc>
 <c2:doc>
   <c2:attr_a></c2:attr_a>
   <c2:attr_b></c2:attr_b>
  </c2:doc>
</parent>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

import re
for tag in soup.find_all(re.compile(".attr_a")):
    print(tag.name)

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多