2012-01-13 38 views
4

如何通過調用湯的屬性來查找特定的div?即類似soup.html.body.div但是我不明白如何在id='idname'這裏得到特定的div?Beautifulsoup根據屬性導航div而不查找所有

我可以做soup.findAll(id='idname')[0]來獲得具體的標籤,但據我所知,這是搜索整個湯。

我想象得到湯的div屬性會更快,因爲你沒有使用findAll()

Firebug報告位置爲html.body.div[2].form.table[2].tbody.tr[3]...但是soup.html.body.div[2]提供了一個關鍵錯誤。

更新:

說你要搶我從http://www.google.com覺得幸運按鈕,螢火報告說,由於存在:

/html/body/center/span/center/div[2]/form/div[2]/div[3]/center/input[2]

有沒有達成方式這沒有使用findAll

回答

3

從Firebug獲得的路徑是XPath表達式。最好使用可讓您直接使用xpath的解析器。我喜歡用lxmletree接口:

from lxml import etree 
tree = etree.parse(yourfile) 
lucky = tree.xpath('/html/body/center/span/center/div[2]/form/div[2]/div[3]/center/input[2]') 
1

有一個findChildren方法,它能夠獲取大部分的方式存在。

它等同於:

findAll(tagname, recursive=False) 

通常將使它更有效率。

所以,你的例子將成爲:

soup.html.body.center.span.center.findChildren('div')[2].\ 
    form.findChildren('div')[2].findChildren('div')[3].\ 
    center.findChildren('input')[2]