【问题标题】:Select specific child elements with BeautifulSoup使用 BeautifulSoup 选择特定的子元素
【发布时间】:2010-12-07 00:01:13
【问题描述】:

我正在阅读 BeautifulSoup 以截取一些非常繁重的 html 页面。浏览 BeautifulSoup 的文档,我似乎找不到选择子元素的简单方法。

给定html:

<div id="top">
  <div>Content</div>
  <div>
    <div>Content I Want</div>
  </div>
</div>

鉴于我有对象顶部,我想要一种简单的方法来获得“我想要的内容”。来到 BeautifulSoup,我认为这很容易,类似于 topobj.nodes[1].nodes[0].string。相反,我只看到变量和函数也将元素与文本节点、cmets 等一起返回。

我错过了什么吗?或者我真的需要使用 .find() 或者更糟糕的是在 .contents 变量上使用 list comphrensions。

原因是我不相信网页的空白是相同的,所以我想忽略它,只遍历元素。

【问题讨论】:

    标签: python beautifulsoup html-parsing


    【解决方案1】:

    find 让您更加灵活,只需运行即可获得所需内容:

    node = p.find('div', text="Content I Want")
    

    但由于您可能不希望如何到达那里,因此以下选项可能更适合您:

    xml = """<div id="top"><div>Content</div><div><div>Content I Want</div></div></div>"""
    from BeautifulSoup import BeautifulSoup
    p = BeautifulSoup(xml)
    
    # returns a list of texts
    print p.div.div.findNextSibling().div.contents
    # returns a list of texts
    print p.div.div.findNextSibling().div(text=True)
    # join (and strip) the values
    print ''.join(s.strip() for s in p.div.div.findNextSibling().div(text=True))
    

    【讨论】:

      猜你喜欢
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2019-05-15
      • 2011-11-07
      • 2022-01-13
      相关资源
      最近更新 更多