2016-06-24 2 views
5

다소 복잡한 XPath 문제가 발생했습니다. 웹 페이지 (나는 Imgur을 사용하고 텍스트를 대체)의 부분이 HTML을 고려XPath 선택 이미지 링크 - img src의 부모 href 링크 (존재하는 경우에만), else select img src link

<a href="//i.imgur.com/ahreflink.jpg" class="zoom"> 
    <img class="post-image-placeholder" src="//i.imgur.com/imgsrclink.jpg"> 
    </img> 
</a> 

내가 먼저 img 태그 문서와 그들의 src ES 해당 찾는 검색 할. 다음으로, img src 링크에 이미지 파일 확장자 (.jpeg, .jpg, .gif, .png)가 포함되어 있는지 확인하고 싶습니다. 이미지 확장명이 포함되어 있지 않으면 가져 오지 마십시오. 이 경우 이미지 확장자가 있습니다. 이제 우리가 원하는 링크를 찾아야합니다. parent href이 존재하므로 해당 링크를 가져와야합니다.

는 결과 원하는 : //i.imgur.com/ahreflink.jpg

하지만 지금의이 parent href이 존재하지 않는 가정 해 봅시다 :

<a name="missing! oh no!"> 
    <img class="post-image-placeholder" src="//i.imgur.com/imgsrclink.jpg"> 
    </img> 
</a> 

원하는 결과 :이 XPath를 구축 가야합니까 어떻게 //i.imgur.com/imgsrclink.jpg

를? 도움이된다면 XPath로 Python (Scrapy)도 사용하고 있습니다. 그래서 문제가 분리되어야한다면, 파이썬도 사용할 수 있습니다.

+0

지금까지 시도한 적이 있습니까? –

+0

나는 링크의 이미지 확장 기능을 점검하는 부분에만 들었지만 어떤 링크를 잡을 지 선택하는 방법에 대해서는 혼란 스러웠다. – dtgee

+0

XPath를 사용하여 전체적으로 결과를 얻고 싶습니까? 아니면 사용중인 스크립팅 언어를 사용하여 일부 논리를 구현할 수 있습니까? –

답변

4

이 하나의 XPath 식에 할 매우 간단합니다 :

//a[not(@href)]/img/@src | //a[img]/@href 
+0

와우, img src에 우선 순위를 매기려고 생각한 적은 없었습니다. 논리적으로 말하자면 먼저 href에 우선 순위를 매겼습니다. 유망한 해결책 인 것 같습니다.하지만 먼저 테스트해야합니다. – dtgee

+0

@dtgee 필터 만 우선 순위는 없습니다. – o11c

4

단일 XPath 식에서 수행 할 필요는 없습니다. 여기에 이미지 확장 검사 생략 Scrapy 구현 고유의 (코멘트에 의해 판단, 당신은 이미 그것을 알아 냈어요) :

images = response.xpath("//a/img") 
for image in images: 
    a_link = image.xpath("../@href").extract_first() 
    image_link = image.xpath("@src").extract_first() 

    print(a_link or image_link) 
+0

아, 고마워. 나는 모든 것을 선택하기 위해서만 XPath를 사용해야 만한다는 생각에 잠시 멈추었다. 나는이 실수에서 배울 것입니다! – dtgee

+0

@dtgee 파이썬보다는 C로 무거워지기 위해서 xpath에서하고 싶을 것이다. – o11c

+0

참. 파이썬을 사용하면 코드를 훨씬 쉽게 읽을 수 있지만, XPath를 사용하고 일부 주석을 추가하면 같은 목적을 달성 할 수 있습니다. – dtgee

관련 문제