2014-05-25 2 views
1
<div class="summary-item"> 
     <label >Price</label> 
     <div class="value"> 
      0.99 GBP 
     </div> 
    </div> 


    <div class="summary-item"> 
     <label >Other info</label> 
     <div class="value"> 
      All languages 
     </div> 
    </div> 

지금까지 나는이 (이름 요약 항목에 의해 다른 클래스가 유의 사용하여 라벨에 도달 한 XPath 식을 사용하여 "0.99 GBP"를 얻기 위해 노력하고 따라서 내가 유일하게, 나는 다음과 같은-형제를 사용하여 시도XPath 식

sel.xpath('//*/div[@class="summary-item"]/label[text()="Price"]').extract() 

그러나, I 클래스에 도착 드릴 수 없습니다) 레이블 이름 가격으로 식별해야합니다,하지만 성공하지 못했습니다, 어떤 도움을 이해할 수있을 것이다.

답변

2

하위 노드의 존재는 술어의 일부일 수 있습니다. 부모를위한 조건으로 label에 대한 테스트를 넣고, 중 별도의 조건으로 (물론 대상 노드를 추가) :

//div[@class="summary-item"][label[text()="Price"]]/div[@class="value"] 

또는 and과 결합을 :

//div[@class="summary-item" and label[text()="Price"]]/div[@class="value"] 

('당신이 돈 참고 t는 시작에 //*/div 필요) 당신이 원하는 경우

당신은 following-sibling을 사용할 수 있습니다, 그것은 다음과 같이 보일 것이다.

,

(여기서 label div 은 술어의 일부인이 아닙니다.

XPath를 사용하여 HTML 클래스를 선택하는 것은 CSS를 사용하는 것과 동일하게 작동하지 않습니다. XPath는 요소가 둘 이상의 클래스에 있어도 CSS가 일치하는 반면 정확한 문자열 만 일치시킵니다. 이 경우에는 제대로 작동하지만주의해야합니다. StackOverflow를 검색하면 문제가 될 수 있습니다. 몇 가지 답변이 있습니다.

관련 문제