BeautifulSoup没有找到父母

时间:2013-03-01 18:52:39

标签: python beautifulsoup

我真的无法解决这个问题。我用BeautifulSoup解析了以下link,我做了这个:

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

它没有找到任何东西。如果您查看链接页面的代码,您会看到包含单词h3的{​​{1}}标记。 确切的一点是:

Titles

如果我让BS解析上面的行,它就完美无缺。我也尝试过:

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

这两个都只在线上工作,但不适用于整个html。

如果我执行soup.find(text='Title').find_parents('h3') soup.find(text='Title').find_parent(class_='findSectionHeader') ,则可以使用整个html。

1 个答案:

答案 0 :(得分:1)

findSectionHeader H3代码之前,文本中有另一个带有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']