3

私は本当にこれを理解することができません。BeautifulSoup を使用して次のリンクを解析し、これを行いました。

soup.find(text='Title').find_parent('h3')

そして、何も見つかりません。リンクされたページのコードを見るとh3、単語を含むタグが表示されますTitles。正確なポイントは次のとおりです。

<h3 class="findSectionHeader"><a name="tt"></a>Titles</h3>

上記の行のみを BS に解析させると、完全に機能します。私も試しました:

soup.find(text='Title').find_parents('h3')
soup.find(text='Title').find_parent(class_='findSectionHeader')

どちらも行でのみ機能しますが、html 全体では機能しません。

私が行うsoup.find(text='Titles').find_parents('div')と、html全体で機能します。

4

1 に答える 1

1

findSectionHeaderH3 タグの前に、テキスト内に別のタグがあります。Title

>>> soup.find(text='Title').parent
<a href="/find?q=batman&amp;s=tt&amp;ref_=fn_tt">Title</a>

検索をより具体的にし、Titles代わりに検索し、ループして正しいものを見つける必要があります。

>>> soup.find(text='Titles').parent
<option value="tt">Titles</option>
>>> for elem in soup.find_all(text='Titles'):
...     parent_h3 = elem.find_parent('h3')
...     if parent_h3 is None:
...         continue
...     print parent_h3
... 
<h3 class="findSectionHeader"><a name="tt"></a>Titles</h3>

find(text='...')部分一致ではなく、全文のみに一致します。代わりに部分一致が必要な場合は、正規表現を使用します。

>>> import re
>>> soup.find_all(text='Title')
[u'Title']
>>> soup.find_all(text=re.compile('Title'))
[u'Titles', u'Titles', u'Titles', u'Title', u'Advanced Title Search']
于 2013-03-01T19:08:21.477 に答える