如何通过调用汤的属性找到特定的div?即soup.html.body.div
之类的东西,但是我不知道如何在id='idname'
找到具体的div?
我可以soup.findAll(id='idname')[0]
来获取特定标签,但据我所知,这是搜索整个汤。
我想,因为你没有使用findAll()
,所以获取汤上的div属性会更快?
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
来覆盖?
答案 0 :(得分:3)
从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]')
答案 1 :(得分: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]