2014-11-23 4 views
0

Xpath와 함께 Python을 사용하여 Reddit을 다듬습니다. 현재 저는 프론트 페이지에서 일하고 있습니다. 나는 프론트 페이지에서 링크를 추출하여 쉘에 제목을 표시하려고합니다.XPath를 사용하여 하이퍼 링크에서 텍스트 추출

이렇게하려면 Scrapy 프레임 워크를 사용하고 있습니다. 나는 이것을 Scrapy shell 자체에서 테스트하고있다.

내 질문은 다음과 같습니다. <a> ABC </a> 속성에서 텍스트를 추출하려면 어떻게해야합니까? 나는 문자열 "ABC"를 원해. 못 찾겠 어. 다음 표현을 시도했지만 작동하지 않습니다.

response.xpath('//p[descendant::a[contains(@class,"title")]]').extract()

response.xpath('//p[descendant::a[contains(@class,"title")]]/text()')

그들 중 누구도 제대로 작동

response.xpath('//p[descendant::a[contains(@class,"title")]]/@data')

response.xpath('//p[descendant::a[contains(@class,"title")]]/@value')

. extract()을 사용하면 전체 속성 자체를 얻을 수 있습니다. 예를 들어, ABC을주는 대신 <a>ABC</a>이 표시됩니다.

어떻게하면 텍스트 문자열을 추출 할 수 있습니까?

답변

1

<p> 경우 <a>이 상황에 있습니다

<p> 
    <something> 
     <a class="title">ABC</a> 
    </something> 
</p> 

이 당신에게 "ABC"를 줄 것이다 :

>>print response.xpath('//p//a[@class="title"]/text()').extract()[0] 
ABC 

//descendants를 사용하는 동일합니다. p[descendant::a]

+0

그건 내가 만든 실수 였어! –

1

만 온라인의 XPath 평가와 테스트,하지만 당신은 //p[descendant::a[contains(@class,"title")]]/text()을 평가하는 경우 당신이

response.xpath('//p/descendant::a[contains(@class,"title")]/text()') 

로 조정 때 작동합니다 (자손 <a> 포함) <p> 현재 요소가 아닌 것입니다 <a>.

+0

의 하위 항목으로 <a>을 고려하지 않았기 때문에 결과를 알려주지 않을 것입니다. 귀하의'.xpath()'함수에서'''를 놓치지 않았습니다. 왜냐하면 이렇게하면 구문 오류가 생기기 때문입니다. –

+0

@NimaSoroush 언급 해 주셔서 감사합니다. 대답은'.xpath()'를 OP에서 조정하고 함수가 아니라 xpath 표현식 만 테스트했습니다. 바로 그 점을 바로 잡았습니다. –

관련 문제