【问题标题】:How to get all nested tags and text in an xml, inside a particular tag?如何在特定标签内获取 xml 中的所有嵌套标签和文本?
【发布时间】:2020-06-22 09:16:27
【问题描述】:
xmlstring="<a> <b> <c> Hello </c> </b> </a>"

我想提取所有“里面”的内容&lt;b&gt; &lt;/b&gt;标签,

为此我使用了

  content = "".join(xmlstring)
  bs_content = bs(content, "lxml")

  for b_text in bs_content.find_all("b"):
      inside_text = b_text.get_text()

inside_textHello 而不是&lt;c&gt; Hello &lt;/c&gt;

如何编写代码来获取&lt;c&gt; Hello &lt;/c&gt;

【问题讨论】:

    标签: python-3.x xml beautifulsoup nested


    【解决方案1】:
    from bs4 import BeautifulSoup
    
    
    xmlstring="<a> <b> <c> Hello </c> </b> </a>"
    soup = BeautifulSoup(xmlstring, 'lxml')
    
    print( ''.join(str(c) for c in soup.select_one('b').contents) )
    

    打印:

     <c> Hello </c> 
    

    【讨论】:

    • 谢谢,但这是特定于这个特定输入的。内部标签的身份(无论是 还是其他任何东西)都是未知的。
    • @xxx374562 是的,这就是为什么我只找到标签&lt;b&gt; 并打印这个标签的内容,不管什么是indise。
    【解决方案2】:

    您可以为此使用 children 方法并提取第二个元素,因为在调用 find_all("b") 时它会返回 &lt;b&gt; &lt;c&gt; Hello &lt;/c&gt; &lt;/b&gt; 项。

    xmlstring="<a> <b> <c> Hello </c> </b> </a>"
    content = "".join(xmlstring)
    bs_content = bs(content, "lxml")
    for b_text in bs_content.find_all("b"):
        print(" ".join([str(i) for i in b_text.children if i != " "]))
    

    输出

    <c> Hello </c>
    

    【讨论】:

    • 能否解释一下最后一行,[1] 是做什么的?
    • 这不适用于此输入"&lt;a&gt; &lt;b&gt; &lt;c&gt; Hello &lt;/c&gt; &lt;d&gt; World &lt;/d&gt; &lt;/b&gt; &lt;/a&gt;
    • b_text.children 在一个生成器中,在这种情况下返回 3 个部分“”用于第一个 b 标签“ Hello ”,它是 index1 处的第二个项目,另一个“”用于第二个 b 标签。
    • 对于"&lt;a&gt; &lt;b&gt; &lt;c&gt; Hello &lt;/c&gt; &lt;d&gt; World &lt;/d&gt; &lt;/b&gt; &lt;/a&gt;",它正在返回&lt;c&gt; Hello &lt;/c&gt;
    • 您可以使用print([i for i in b_text.children if i != " "]) 将返回"&lt;a&gt; &lt;b&gt; &lt;c&gt; Hello &lt;/c&gt; &lt;d&gt; World &lt;/d&gt; &lt;/b&gt; &lt;/a&gt;" 输出[&lt;c&gt; Hello &lt;/c&gt;, &lt;d&gt; World &lt;/d&gt;]
    猜你喜欢
    • 2020-11-21
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多