使用BeautifulSoup在html中搜索字符串

我正在使用BeautifulSoup在特定页面上查找用户输入的字符串。例如,我想查看字符串“ Python”是否位于页面上:[http://python.org]

当我使用时:find_string = soup.body.findAll(text=re.compile('Python'), limit=1)find_string返回了[u'Python Jobs']

但是当我使用时:find_string = soup.body.findAll(text=re.compile('Python'), limit=1)find_string按预期返回了[u'Python Jobs']

这两个语句之间有什么区别,使得当要搜索的单词实例不止一个时,第二条语句可以工作

kachilous asked 2020-08-01T02:53:24Z
3个解决方案
50 votes

以下行正在寻找确切的NavigableString'Python':

>>> soup.body.findAll(text='Python')
[]

请注意,找到以下NavigableString:

>>> soup.body.findAll(text='Python Jobs') 
[u'Python Jobs']

请注意以下行为:

>>> import re
>>> soup.body.findAll(text=re.compile('^Python$'))
[]

因此,您的正则表达式正在查找与本地导航字符串“ Python”不完全匹配的“ Python”。

sgallen answered 2020-08-01T03:05:24Z
22 votes

html.find('Python')搜索具有您提供的确切文本的元素:

import re
from BeautifulSoup import BeautifulSoup

html = """<p>exact text</p>
   <p>almost exact text</p>"""
soup = BeautifulSoup(html)
print soup(text='exact text')
print soup(text=re.compile('exact text'))

输出量

[u'exact text']
[u'exact text', u'almost exact text']

“查看字符串'Python'是否位于页面[http://python.org“:]

import urllib2
html = urllib2.urlopen('http://python.org').read()
print 'Python' in html # -> True

如果需要在字符串中查找子字符串的位置,可以执行html.find('Python')

jfs answered 2020-08-01T03:05:58Z
1 votes

我还没有使用BeautifulSoup,但以下内容可能会有所帮助。

import re
import urllib2
stuff = urllib2.urlopen(your_url_goes_here).read()  # stuff will contain the *entire* page

# Replace the string Python with your desired regex
results = re.findall('(Python)',stuff)

for i in results:
    print i

我并不是说这是替代品,但也许您可以在概念中获得一些价值,直到直接回答。

Bit Bucket answered 2020-08-01T03:06:23Z
translate from https://stackoverflow.com:/questions/8936030/using-beautifulsoup-to-search-html-for-string