2017-06-24 8 views
2

私はlxmlを使用して特定のページをスクラップしています。私はIDでタグを取得する方法を知っていますが、実際のID属性を取得する方法を見つけることができませんでした。divのすべての子のIDを取得する方法

例えばHTMLであると言う:

<div id="stuff" > 
    <div id="some unknown"> xxxx </div> 
    <div id="another unknown"> xxxxx </div> 
</div> 

がどのように私はリスト

['some unknown', 'another unknown'] 

そう特にXPathを使用する方法はありますを得るのですか?

+0

どのxpathを試しましたか? –

+0

正直なところ、これにアプローチする方法が不明です。 div.xsを取得するために 'root.xpath( '// * [@ id =" stuff "]/div /')'を試しました – Abe

答えて

1

あなたは直接の子のidをしたい場合は、次のXPathクエリを使用することができます。ここでは

#          v obtain id attribute 
document.xpath('//*[@id="stuff"]/*[@id]/@id') 
#    ^#stuff tag ^child with id attribute 

<* id="stuff">タグのための我々ので初見、そして私たちはどんな(直接の子を探してくださいタグ)は@idで、@idを取ります。

これはlxml.etree._ElementUnicodeResult要素のリストを返します。ここで私たちが子供の種類に気を注意してください

[str(the_id) for the_id in document.xpath('//*[@id="stuff"]/*[@id]/@id')] 

注:私たちは、しかし、文字列値を取得するためにstr(..)を使用することができます。あなただけ<div>子供のid秒をしたい場合は、あなたが使用することができます。

#           v obtain id attribute 
document.xpath('//*[@id="stuff"]/div[@id]/@id') 
#    ^#stuff tag ^child with id attribute 

をする場合には、あなたがのためにすべての子孫を見て、あなたは単に@id="stuff"クエリと子供たちの間で、追加のスラッシュを追加する必要があります。

#          v obtain id attribute 
document.xpath('//*[@id="stuff"]//*[@id]/@id') 
#    ^#stuff tag ^descendant with id attribute 
+0

非常に詳細な回答をありがとう、私はそれを試してみます - 編集 - それ作品! – Abe

関連する問題