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 回答