如何通过调用汤的属性来找到特定的div?即类似soup.html.body.div
的东西,但是我不知道如何在这里用id='idname'
获得特定的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,firebug报告称:
/html/body/center/span/center/div[2]/form/div[2]/div[3]/center/input[2]
有没有一种方法可以在不使用findAll
的情况下达到?
从Firebug获得的路径是一个XPath表达式。最好使用可以直接使用xpath的解析器。我喜欢使用lxml
及其etree
接口:
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]')
有一个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]