2010-12-13 79 views
0
<parent1> 
    <span>Text1</span> 
</parnet1> 
<parent2> 
    <span>Text2</span> 
</parnet2> 
<parent3> 
    <span>Text3</span> 
</parnet3> 

我用Python解析這個& BeautifulSoup。我有一個變量soupData它存儲需要對象的指針。例如,如何獲得指向父母2的指針,例如,如果我有文本Text2。所以問題是按內容過濾span標籤。我怎樣才能做到這一點?BeautifulSoup問題

回答

1

修正的結束標籤拼寫後:

[e for e in soup(recursive=False, text=False) if e.span.string == 'Text2'] 
1

我不認爲有一種方法可以一步完成。因此:

for parenttag in soupData: 
    if parenttag.span.string == "Text2": 
     do_stuff(parenttag) 
     break 

可以使用生成器表達式,但不能太短。

0

使用Python 2.7.6和4.3.2 BeautifulSoup我發現了馬塞洛的答案,給出一個空列表。這爲我工作,但是:

[x.parent for x in bSoup.findAll('span') if x.text == 'Text2'][0] 

或者,一個可笑的過度設計解決方案(至少這個特定的問題,但也許你會做太長時間放在一個標準篩選,將是有益相當容易理解的列表表達式),你可以這樣做:

def hasText(text): 
    def hasTextFunc(x): 
     return x.text == text 
    return hasTextFunc 

創建一個函數工廠,然後

hasTextText2 = hasText('Text2') 

filter(hasTextText2,bSoup.findAll('span'))[0].parent 

得到參考父標記使y ou正在尋找