我真的无法解决这个问题。我用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。
答案 0 :(得分:1)
在findSectionHeader
H3代码之前,文本中有另一个带有Title
的标记:
>>> soup.find(text='Title').parent
<a href="/find?q=batman&s=tt&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']