2012-01-13 43 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]