BeautifulSoup字符串搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup字符串搜索相关的知识,希望对你有一定的参考价值。

我一直在使用Google搜索,并在此处搜索有关BeautifulSoup对象中的字符串的其他问题。

根据我的搜索,以下内容应检测到该字符串-但不能:

strings = soup.find_all(string='Results of Operations and Financial Condition')

但是,以下内容检测到该字符串:

tags = soup.find_all('div','class':'info')

for tag in tags:

    if re.search('Results of Operations and Financial Condition',tag.text):

    ''' Do Something'''

为什么一个起作用而另一个不起作用?

答案

您可能要使用:

strings = soup.find_all(string=lambda x: 'Results of Operations and Financial Condition' in x)

之所以会这样,是因为find_all的实现会查找您搜索的字符串以完全匹配。我想您可能在'Results of Operations and Financial Condition'旁边还有其他一些文字。

如果您检查文档here,您会看到可以为该string参数提供函数,并且似乎以下几行是等效的:

soup.find_all(string='Results of Operations and Financial Condition')
soup.find_all(string=lambda x: x == 'Results of Operations and Financial Condition')
另一答案

对于此代码

page = urllib.request.urlopen('https://en.wikipedia.org/wiki/Alloxylon_pinnatum')
sp = bs4.BeautifulSoup(page)
print(sp.find_all(string=re.compile('The pinkish-red compound flowerheads'))) # You need to use like this to search within text nodes.
print(sp.find_all(string='The pinkish-red compound flowerheads, known as'))
print(sp.find_all(string='The pinkish-red compound flowerheads, known as ')) #notice space at the end of string

结果是-

['The pinkish-red compound flowerheads, known as ']
[]
['The pinkish-red compound flowerheads, known as ']

似乎string参数搜索完全匹配的字符串,不是某些html文本node是否包含该字符串,而是HTML文本node的确切值。但是,您可以使用正则表达式来搜索文本节点是否包含某些字符串,如上面的代码所示。

以上是关于BeautifulSoup字符串搜索的主要内容,如果未能解决你的问题,请参考以下文章

BeautifulSoup 解析后返回间隔文本

CSS 选择器:BeautifulSoup4

使用 BeautifulSoup 解析未关闭的 `<br>` 标签

跟着知识追寻者学BeautifulSoup,你学不会打不还口,骂不还手

BeautifulSoup字符串搜索

孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1