【问题标题】:Beautifulsoup navigating divs by attribute without findAllBeautifulsoup按属性导航div而不使用findAll
【发布时间】:2012-01-13 15:17:50
【问题描述】:

如何通过调用汤的属性找到特定的 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 获取我很幸运按钮,萤火虫报告说:

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

有没有办法使用findAll 达到这个

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    您从 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]')
    

    【讨论】:

      【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        • 2019-02-14
        • 2012-05-18
        相关资源
        最近更新 更多