2010-08-06 63 views
2

我使用BS刮網頁屬性和我有點卡住了小問題。這是頁面中的HTML片段。提取BeautifulSoup標記值時uanble通過位置或匹配

<span style="font-family: arial;"><span style="font-weight: bold;">Artist:</span> M.I.A.<br> 
</span> 

一旦我有了湯,我怎麼能找到這個標籤,並得到藝術家的名字,即M.I.A. ,因爲它是在頁面中的十幾個地方使用我所不能比擬與style屬性標籤。我甚至不知道span標籤的確切位置,因爲它會改變每個頁面的位置。所以,我無法按位置匹配。藝術家的名字改變了,但是標題的跨度結構總是一樣的。

我只想提取物中的藝術家名(M.I.A.位)。

+0

所以,你要的東西用的文本值標籤後「藝術家」?那是你想要做什麼? – 2010-08-06 10:59:44

+0

是的,這正是我想要的。謝謝。 – 2010-08-09 05:59:33

回答

1

BeautifulSoup是那種死了,因爲SGMLParser已被棄用。我建議你使用更好lxml庫 - 它甚至有xpath支持!

from lxml import html 

text = ''' 
<span style="font-family: arial;"> 
    <span style="font-weight: bold;">Artist:</span>M.I.A.<br> 
</span> 
''' 

doc = html.fromstring(text) 
print ''.join(doc.xpath("//span/span[text()='Artist:']/../text()")) 

這xpath表達式意味着「找到span標籤這是另一個span標記內幷包含文本'Artist:',並抓住含父標籤的所有文本」。它正確打印M.I.A.正如人們所期望的那樣。