首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >BeautifulSoup:搜索.text属性

BeautifulSoup:搜索.text属性
EN

Stack Overflow用户
提问于 2018-12-31 13:16:49
回答 2查看 187关注 0票数 1

我有以下情况

代码语言:javascript
代码运行次数:0
运行
复制
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的标记)。

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

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

没有方法搜索元素的.text属性吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-31 14:00:36

您可以尝试使用下面的方法通过完整的文本内容span找到"HeyJoe"节点。

代码语言:javascript
代码运行次数:0
运行
复制
tag = [span for span in soup.findAll('span') if span.text == "HeyJoe"][0]
票数 1
EN

Stack Overflow用户

发布于 2018-12-31 13:57:00

从你的措辞来看,你想做什么根本不清楚。

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

代码语言:javascript
代码运行次数:0
运行
复制
soup.find("span", text=re.compile("Hey"))

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

代码语言:javascript
代码运行次数:0
运行
复制
soup.find("span", text=re.compile("Hey", re.IGNORECASE))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53987945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档