BeautifulSoup:搜索.text属性

时间:2018-12-31 13:16:49

标签: python web-scraping beautifulsoup

我有以下情况

from bs4 import BeautifulSoup
html = '''<span class='generic'><span>Hey</span><span>Joe</span></span>'''
soup = BeautifulSoup(html, 'lxml')
tag = soup.find('span', text="HeyJoe")
print(tag)

打印None

但是如果我跑步

soup.find('span', text="Hey").parent.text

它返回HeyJoe,因此它返回包括子文本在内的“全文”文本。我相信text=函数的find()参数也可以搜索“全文”,即.text标签。

我必须找到父span标签(具有类generic的标签)。

我想通过调用搜索.text元素的BeautifulSoup函数来做到这一点。以便在搜索之前将所有子标签中的文本连接起来。有这样的功能吗?

  1. 我无法使用该类来查找标签,因为在实际情况下,它是一个非常通用的类,被许多标签广泛使用
  2. 我不想使用span文本搜索子项Hey,然后检索父项,因为在实际情况下这也是很通用的。

是否无法搜索元素的.text属性?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用以下内容通过完整的文本内容span查找"HeyJoe"节点:

tag = [span for span in soup.findAll('span') if span.text == "HeyJoe"][0]

答案 1 :(得分:0)

从您的措辞来看,您不清楚要做什么。

如果您要搜索特定模式,则可以使用re.compile并将其直接传递给BeautifulSoup的text=关键字参数,例如

soup.find("span", text=re.compile("Hey"))

这将返回页面上任何span标记(如果有)中字符串“ Hey”的第一个实例。如果您希望不区分大小写,请使用:

soup.find("span", text=re.compile("Hey", re.IGNORECASE))