【问题标题】:how to get text from within a tag, but ignore other child tags如何从标签中获取文本,但忽略其他子标签
【发布时间】:2015-01-27 12:30:10
【问题描述】:

我正在做美味的汤。 我有一个 html 字符串:

<div><b>ignore this</b>get this</div>

如何检索“get this”,而忽略“ignore this

谢谢

【问题讨论】:

    标签: python python-3.x beautifulsoup


    【解决方案1】:

    您可以获得div 文本,而不是递归检索子文本:

    >>> from bs4 import BeautifulSoup
    >>> soup = BeautifulSoup('<div><b>ignore this</b>get this</div>')
    >>> soup.div.find(text=True, recursive=False)
    u'get this'
    

    这与文本相对于子项的位置无关:

    >>> soup = BeautifulSoup('<div>get this<b>ignore this</b></div>')
    >>> soup.div.find(text=True, recursive=False)
    u'get this'
    

    【讨论】:

    • 请问第一个和第二个代码sn-ps有什么区别?在我看来,它们是相同的两行(第二个代码 sn-p 中有一个小错字)。
    • @AustinA 不同之处在于 html。这是为了展示recursive=False 如何为您提供div 的文本,而忽略子元素,无论它们的位置如何。 (谢谢,我在第二个 sn-p 中将 s 修正为 soup 错字:))
    • 是的,我现在明白了。由于某种原因,我以前看不到。不过,我确实有一个问题。假设有多个 div 标签,我想从中获取文本。 &lt;div class="main"&gt;&lt;div class="sub"&gt;Text1.&lt;span&gt;I don't want this text.&lt;/span&gt;&lt;/div&gt;&lt;div class="sub"&gt;Text2.&lt;span&gt;I don't want this text either.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;。我一直在尝试做的是使用soup.findAll('div','sub', recursive=False),但这给了我一个空列表,而soup.findAll('div','sub')给了我Text1. I don't want this text. Text2. I don't want this text either.我在这里做错了什么?
    • find_all 返回匹配列表。您需要将我的解决方案应用于每个匹配的 div。像这样的东西:' '.join(div.find(text=True, recursive=False) for div in soup.findAll('div', 'sub'))。如果需要,然后将所有文本连接到一个字符串中。
    • @Austin。如果他帮助了你,你能给他点赞吗?这是一个很好的答案。谢谢:)
    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多