BeautifulSoupを使用して、特定のページでユーザーが入力した文字列を探しています。たとえば、「Python」という文字列がページにあるかどうかを確認したい: http://python.org
私が使用したとき:find_string = soup.body.findAll(text='Python')
find_stringが_[]
_を返しました
しかし、私が使用したとき:find_string = soup.body.findAll(text=re.compile('Python'), limit=1)
find_stringは期待どおり_[u'Python Jobs']
_を返しました
検索するWordのインスタンスが複数ある場合に2番目のステートメントを機能させるこれら2つのステートメントの違いは何ですか
次の行はexact 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$'))
[]
したがって、正規表現は、NavigableString「Python」と完全に一致するものではなく、「Python」の出現を探しています。
_text='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')
を実行できます。
私はBeuatifulSoupを使用したことはありませんが、次の方法が役立つ場合があります。
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
私はこれが代替品であることを提案していませんが、多分あなたは直接的な答えが出てくるまでコンセプトの価値を集めることができます。