2

我正在阅读 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 变量上使用 list comphrensions。

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

4

1 回答 1

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))
于 2009-10-15T11:34:56.737 回答