首页 > 解决方案 > 美汤。如何查找包含在文本中的标签

问题描述

我有这样的结构:

<p>blablalba<a href='somelink'>blabla</a></p>

我需要找到放置在文本内的任何标签,而不仅仅是“a”。例如

<p>blablalba<strong>blabla</strong>blalba</p>

我怎样才能做到这一点?

标签: pythonbeautifulsoup

解决方案


要从“双方”查找具有文本兄弟的标签,您可以使用自定义 lambda 函数:

from bs4 import BeautifulSoup

html_doc = """
<p>blablalba<a href='somelink'>NOT FROM BOTH SIDES</a></p>
<p>blablalba<a href='somelink'>I WANT THIS</a>xxx</p>
<p>blablalba<strong>I WANT THIS</strong>blalba</p>

<p><strong>NOT FROM BOTH SIDES</strong>blalba</p>
<p>blalba<strong>NOT FROM BOTH SIDES</strong></p>
"""

soup = BeautifulSoup(html_doc, "html.parser")


def find_tags(t):
    prv = t.find_previous_sibling(text=True)
    nxt = t.find_next_sibling(text=True)

    return (prv and nxt) and (prv.strip() and nxt.strip())


for tag in soup.find_all(find_tags):
    print(tag)

印刷:

<a href="somelink">I WANT THIS</a>
<strong>I WANT THIS</strong>

推荐阅读