2017-12-18 8 views
1

私は、次のコードXPathは兄弟/兄弟のテキストに基づいて要素を選択しますか?

いずれか
response.xpath('*/div[@class="outer"]/h2/text()="Chief Executive"') 

# Returns a Selector 
[<Selector xpath='*/div[@class="outer"]/h2/text()="Chief Executive"' data=u'0'>] 

しかし、すぐに、私は両親や兄弟Iにアクセスしようとするとを使用して最高経営責任者を見つけることができますChief ExecutiveSomeone Else

のための連絡先の詳細をこすりしようとしていますエラーが発生するか、データが取得されません。ここ

私は

response.xpath('*/div[@class="outer"]/h2/text()="Chief Executive"/following-sibling') 

ValueError: XPath error: Invalid type in */div[@class="outer"]/h2/text()="Chief Executive"/following-sibling 
response.xpath('*/div[@class="outer"]/h2/text()="Chief Executive"/following-sibling::content') 

ValueError: XPath error: Invalid type in */div[@class="outer"]/h2/text()="Chief Executive"/following-sibling::content 
response.xpath('*/div[@class="outer"]/h2/text()="Chief Executive"/parent::*') 

ValueError: XPath error: Invalid type in */div[@class="outer"]/h2/text()="Chief Executive"/parent::* 
を試みたいくつかのパターンであります
response.xpath('*/div[@class="outer"]/h2/text()="Chief Executive"/..') 

ValueError: XPath error: Invalid type in */div[@class="outer"]/h2/text()="Chief Executive"/.. 
response.xpath('*/div[@class="outer"]/h2[.="Chief Executive"]') 

[] # No data found 
response.xpath('*/div[@class="outer"]/h2[text()="Chief Executive"]') 

[] # No data found 

ベースHTML

<div class="outer"> 
    <h2 class="legend"> 
    Chief Executive 
    </h2> 

    <div class="fieldset"> 

    <div class="display-row"> 
     <div class="display-label">Contact name:</div> 
     <div class="display-field-no-width"> 
     Mr. Steven Bob 
     </div> 
    </div> 

    <div class="display-row"> 
     <div class="display-label">Job title:</div> 
     <div class="display-field-no-width"> 
     Chief Executive Officer 
     </div> 
    </div> 

    <div class="display-row"> 
     <div class="display-label">Organisation name:</div> 
     <div class="display-field-no-width"> 
     1 COMAPNY PTY LTD 
     </div> 
    </div> 

    </div> 
</div> 


<div class="outer"> 
    <h2 class="legend"> 
    Someone Else 
    </h2> 

    <div class="fieldset"> 

    <div class="display-row"> 
     <div class="display-label">Contact name:</div> 
     <div class="display-field-no-width"> 
     Mr. Steven Bob 
     </div> 
    </div> 

    <div class="display-row"> 
     <div class="display-label">Job title:</div> 
     <div class="display-field-no-width"> 
     Chief Executive Officer 
     </div> 
    </div> 

    <div class="display-row"> 
     <div class="display-label">Organisation name:</div> 
     <div class="display-field-no-width"> 
     1 COMAPNY PTY LTD 
     </div> 
    </div> 

    </div> 
</div> 

答えて

3

このXPathの、

normalize-space(//div[normalize-space(h2)='Chief Executive'] 
       /div[div[1]='Contact name:']) 

がこのパターンに続き

Mr. Steven Bob 

を返します要求に応じて、あなたは、このエントリから、またはSomeone Elseのエントリから他のフィールドを選択することができます。

+0

ありがとうございましたkjhughes、最終的に本当の問題は、私が後にAJAX経由でロードしていたデータでした。私はサーバーサイドからこれを気付かなかったのですが、一度ソートすれば正規化スペースも私に書き込み検索 –

関連する問題