使用BeautifulSoup选择特定的子元素

时间:2009-10-15 11:12:42

标签: python beautifulsoup html-parsing

我正在阅读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。相反,我只看到变量和函数,它们还将元素与文本节点,注释等一起返回。

我错过了什么吗?或者我真的需要使用.find()或使用.contents变量上的列表组合来使用长格式。

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

1 个答案:

答案 0 :(得分:2)

您对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))