2017-11-12 4 views
1

나는 긁힌 자국이있는 링크 (https://www.century21.com/real-estate/rock-spring-ga/LCGAROCKSPRING/)를 시도했다. 나는 그것으로부터 "침대"데이터를 추출하고 싶었다. 그 안에 일부 집에 대한 몇 가지 빈 세부 정보가 있기 때문에 몇 가지 "침대"세부 정보 만 추출됩니다. 그러나 나는 모든 것에 대한 세부 사항을 원합니다. 그렇지 않다면 "NaN"또는 뭔가가 표시되어야합니다. 또 다른 문제는 내가이 태그를 검사 한 것입니다 : 빈 공간을 제외한 치료

<div class="property-beds"> 
 
      <strong>2</strong> beds 
 
     </div>

나는 "이 침대"를 추출하기 위해 XPath는 명령을 사용했다. "침대"는 "2 개 침대"로 표시되지 않습니다. 그래서 나는 "|" 2 요소를 통합합니다.
response.xpath('//div[@class="property-beds"]/strong/text() | //div[@class="property-beds"]/text()'] 

나에게 올바른 출력을 가지고 있지만, 문제는 그것이 (다른 라인에서 한 줄에 2 침대)이 개 별도의 라인에서 결과 괜찮나 한 줄에 표시를 보여주고 있습니까?

답변

2

당신은 요소의 텍스트 및 모든 자식 노드를 추출하는 부모 요소에 string()을 사용할 수 있습니다 : 둘 이상의 요소가있는 경우

In [10]: root.xpath('string(//div[@class="property-beds"])') 
Out[10]: '2 beds' 

, 당신은 일치 요소를 반복해야합니다 //div[@class="property-beds"]을 입력 한 다음 elem.xpath('string()')을 입력하십시오.

+0

두 번째 부분 인 plz를 설명 할 수 있습니까? 1 개 이상의 요소에 대해 명령을 반복합니다. –

+0

@AkhilReddy :'string()'은 세트의 첫 번째 요소에서만 작동합니다. response.xpath ('// div [@ class = "property-beds"]') : print (elem.xpath ('string()'). 추출())'. – Blender

0

string() 메서드를 사용하십시오. root.xpath('string(//div[@class="property-beds"])')