2012-01-13 15 views
4

スープの属性を呼び出すことで特定のdivを見つけるにはどうすればよいですか?つまりsoup.html.body.divのようなものですが、id='idname'で特定のdivを取得する方法がわかりません。BeautifulSoup findAllなしの属性でdivをナビゲートする

私は特定のタグを取得するためにsoup.findAll(id='idname')[0]を行うことができますが、これはスープ全体を検索しています。

findAll()を使用していないので、スープの属性によるdivの取得が高速になると思いますか?

ファイヤーバグは、位置をhtml.body.div[2].form.table[2].tbody.tr[3]...と報告しますが、soup.html.body.div[2]を実行するとキーエラーが発生します。

更新:

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

到達する方法はあります:

は、放火犯が存在としてあることを報告し、あなたは私がhttp://www.google.comからラッキーボタンを感じているをつかむしたいとこのなしを使用してfindAllを使用していますか?

答えて

3

Firebugから取得するパスは、XPath式です。 xpathを直接使用できるようにするパーサーを使用するのが最善です。

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]') 
1

そこに道のほとんどを取得findChildren方法があります:私はそのetreeインターフェースでlxmlを使用して好きです。

それはと同等です:通常、それははるかに効率的になります

findAll(tagname, recursive=False) 

だからあなたの例では、なる:

soup.html.body.center.span.center.findChildren('div')[2].\ 
    form.findChildren('div')[2].findChildren('div')[3].\ 
    center.findChildren('input')[2] 
関連する問題