假设我们有类似HTML的样式
<p class='cls1'> Hello </p>
因此,我想通过使用BS4搜索“ Hello” 来找到标签<p>
(并且我暂时不知道该标签周围是什么标签)。
应该像
full_string = soup.find(text=re.compile('Hello'))
full_string.get_parent_tag() # <p>
full_string.get_parent_class() # cls1
在BS4中可以吗? 谢谢!
答案 0 :(得分:1)
当然可以。
import re
from bs4 import BeautifulSoup
your_html = """<p class='cls1'> Hello </p>"""
print(BeautifulSoup(your_html, "html.parser").find_all(lambda t: t.name == "p" and re.compile("Hello")))
输出:
[<p class="cls1"> Hello </p>]
如果您不知道要使用的标签,可以尝试以下操作:
from lxml import html
your_html = """<p class='cls1'> Hello </p>"""
print(html.fromstring(your_html).xpath("//*[contains(text(), 'Hello')]"))
输出:
[<Element p at 0x7f2b172ae5e0>]
答案 1 :(得分:0)
要通过文本搜索标签,可以使用CSS选择器p:contains(<text>)
:
from bs4 import BeautifulSoup
html = """<p class='cls1'> Hello </p>"""
soup = BeautifulSoup(html, "html.parser")
print(soup.select_one('p:contains("Hello")').text)
输出:
Hello