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変数のリスト補完を使用する必要がありますか。

その理由は、Webページの空白が同じであるとは思わないので、それを無視して要素のみをトラバースしたいからです。

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 に答える