2013-03-01 82 views
3

我真的無法解決這個問題。我分析以下link與BeautifulSoup,我這樣做: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。

+3

有一個笑話在這裏的某個地方你尋找父母在頁面上列出的蝙蝠俠電影...... – JosefAssad 2013-03-01 19:01:28

回答

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'] 
+0

謝謝你,這是一個非常愚蠢的錯誤就是假定那個類只有一個標籤。 – whatyouhide 2013-03-01 23:05:31