2016-10-07 74 views
1

可以說我有HTMLBeautifulSoup - 帶標籤的文本中提取文本

<div>Hey</div><div>This is <b>some text<b/>, right here. <a>Link<a/></div> 

和代碼

soup = BeautifulSoup(html) 
texts = soup.findAll(text=True) 

print()函數將返回

['Hey', 'This is ', 'some text', ', right here.', 'Link'] 

的文本。

我怎麼能排除像「B」標籤(只包含文本),這樣我就可以得到需要的結果是

['Hey', 'This is <b>some text<b/>, right here.', 'Link'] 

而且最好字符串,但相當於NavigableStrings或相似。

換句話說,我怎麼能排除一些標籤導航樹?

+0

你是什麼意思*我怎樣才能排除像'B'(只包含文本)標籤,*你認爲是什麼樣的其他標籤是像B? –

+0

只有'我'和可能br,雖然我的html只包含b。我基本上想要從標籤中分離出所有的文本資源,除了'b',我想從中抽取父母的文本,排除其他兄弟標籤中的任何文本。 –

+0

你可以添加一個更復雜的例子,你想要輸出什麼? –

回答

-1

基於新的OP的問題:

eDiv = soup.findAll("div") 
if eDiv.find("b") is None: 
    tag = eDiv.text 
else: 
    tag = eDiv 

現在你可以追加到列表這一點。

+0

將工作在我的例子,但我的實際HTML需要不同的方法。某些div包含我想從單獨提取文本的其他元素。我的html更大,我不能手動挑選元素。一些包含文本的標籤是h1,h2,p,li,a等...和divs,但是一些div裏面還有其他元素。 –

+0

必須有一些您感興趣的div的唯一標識符,然後您可以使用CSS選擇器(使用soup.select)來獲取它們。如果您在這裏提供大量html,我可能會嘗試爲您獲取唯一標識符。 –

+0

'EDIV = soup.findAll( 「格」) 如果eDiv.find( 「B」)是無: \t標籤= eDiv.text 其他: \t標籤= eDiv'現在你可以追加到列表這一點。 –

相關問題