BeautifulSoup找不到父节点
我真的搞不明白这个问题。我用BeautifulSoup解析了这个链接,然后我做了如下操作:
soup.find(text='Title').find_parent('h3')
但是它什么都找不到。如果你查看一下这个链接页面的代码,你会看到一个h3
标签,里面有个词是Titles
。具体来说是:
<h3 class="findSectionHeader"><a name="tt"></a>Titles</h3>
如果我让BeautifulSoup只解析上面那一行,它就能正常工作。我还尝试了:
soup.find(text='Title').find_parents('h3')
soup.find(text='Title').find_parent(class_='findSectionHeader')
这两种方法在只解析那一行时都能正常工作,但在整个html中却不行。
如果我用soup.find(text='Titles').find_parents('div')
,它在整个html中就能正常工作。
1 个回答
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']