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 解析未关闭的 `<br>` 标签