2016-05-04 13 views
0

現在選択されているノードの先行兄弟を取得しようとしていますが、何が間違っているのかわかりません。lxml xpathを使用して先行ノードを選択しようとしています

これは、htmlのスナップです:HREFはASINが含まれている場合は、私が取得しようとしています何

source = """ 
    <div class="zg_itemImmersion"> 
    <div class="zg_rankDiv"><span class="zg_rankNumber">10.</span></div> 
    <div class="zg_itemWrapper" style="height:285px"> 
     <div class="zg_image"> 
      <div class="zg_itemImageImmersion"><a href=" 
      http://www.amazon.com/Oral-B-Action-Replacement-Electric-Toothbrush/dp/B000AUIFCA/ref=zg_mw_8517148011_10"><img src="http://ecx.images-amazon.com/images/I/41RHKIQXnhL._SL160_SL150_.jpg" alt="Oral-B Floss Action Replacement Elect..." title="Oral-B Floss Action Replacement Elect..."/></a></div> 
     </div> 
    </div> 
""" 

はrankNumberです:B000AUIFCA、

from lxml import html 
source1 = html.fromstring(source) 
links = source1.xpath('//div[@class="zg_itemImmersion"]//div[@class="zg_itemImageImmersion"]/a[contains(@href,"B000AUIFCA")]/@href') 

上記は私に私に必要なが含まれている右のリンクを提供しますASIN:B000AUIFCA

['\n\n\n\n\n\n\nhttp://www.amazon.com/Oral-B-Action-Replacement-Electric-Toothbrush/dp/B000AUIFCA/ref=zg_mw_8517148011_10/191-4138574-0525467'] 

今、私は前の兄弟からランク "10"を持っていたい - [span class="zg_rankNumber"] ASINは('//span[@class="zg_rankNumber"]//a//@href') == B000AUIFCAそのため

に私が使用している場合:link2 = source1.xpath('//div[@class="zg_itemImmersion"]//div[@class="zg_itemImageImmersion"]/a[contains(@href,"B000AUIFCA")]/preceding-sibling::*/text()')

をするが、そのは戻るヌル

答えて

2

次のXPathを使用することができます:最初の発見

//div[@class="zg_itemImmersion"] 
    [.//div[@class="zg_itemImageImmersion"]/a[contains(@href,"B000AUIFCA")]] 
//span[@class="zg_rankNumber"] 

XPathを'zg_itemImmersion' divには、ターゲットテキスト 'ASIN:B000AUIFCA'が含まれています。その後、divから、'zg_rankNumber' spanが返されます。

+0

これはすばらしいことでしたが、なぜ "。"現在の要素に固執する文字が私の心に来た:(はい( ' ")]] // span [@ class =" zg_rankNumber "]/text() ')は" 10 "を返します。ありがとう@ har07 –

+0

私も知りたいのですが、何かを使うことができますか? ? –

+0

'preceeding-sibling'が正しく使用されている場合は、' preceding-sibling'は*兄弟*だけを考慮してください。つまり、同じ親要素fe 'zg_rankDiv'を共有するノードは 'zg_itemWrapper'親が異なる要素は '直前の'軸だけを使って試行します。 – har07

関連する問題