2013-04-17 5 views
0

특정 클래스 이름을 가진 이미지 URL을 찾을 작은 스크래퍼 스크립트를 작성하고 있습니다. 내 cURL 및 DOMDocument 괜찮아요, 그리고 DomXPath 정말 (내가 말할 수있는 한 멀리, 아무런 오류가 있습니다) 잘 알고 있지만 xpath 쿼리 결과의 URL을 얻는 방법을 해결하기 위해 노력하고 있습니다. 지금까지DOMDocument가있는 DomXPath를 사용하여 <img> 클래스 URL

내 코드 :

$dom = new DOMDocument(); 
@$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$div = $xpath->query('//*[@class="productImage"]'); 


var_dump($div); 
echo $div->item(0); 

나는의 ($ x)는 페이지 출력 문제 없어 위해서 var_dump 경우

. 그래서 CURL은 잘 작동합니다. 하지만 $ div에 포함 된 데이터를 가져 오는 방법을 모르겠습니다. 내가 그 이미지 태그의 소스를 원하는

<img src="/uploads/5W/yP/5WyPP4l7Z-jmZRzu_MJ6zg/1077-d.jpg" border="1" alt="Album" class="productImage"> 

: 나는처럼 보이는 'productImage'의 클래스와 이미지를 찾기 위해 노력하고있다.

제안 사항?

답변

2
$dom = new DOMDocument(); 
$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$imgs = $xpath->query('//*[@class="productImage"]'); 

foreach($imgs as $img) 
{ 
    echo 'ImgSrc: ' . $img->getAttribute('src') .'<br />' . PHP_EOL; 
} 

그 시도 ...

== 편집 : 추가 정보 ==

난 당신이 하나 이상의 IMG을 찾을 수 있기 때문에 여기에 루프가 사용하는 이유. 당신은 단지 하나의 요소가 알고있는 (또는 첫 번째 DOM 노드가 발견 할) 경우 domnodelist의 항목 방법을 통해 domnodelist에서 elelement에 액세스 할 수 있습니다 -과 같이 :

$dom = new DOMDocument(); 
$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$img = $xpath->query('//*[@class="productImage"]'); 

echo 'ImgSrc: ' . $img->item(0)->getAttribute('src') .'<br />' . PHP_EOL; 
+0

오우 감사합니다. xpath 쿼리 결과에 대한 모든 개체 함수를 나열하는 어딘가에 목록이 있습니까? 내가 찾지 못해서 : S – Chud37

+0

docs (http://www.php.net/manual/en/book.dom.php)를 살펴보면 xpath 쿼리가 DomNodeList를 반환한다는 것을 알 수 있습니다. 그런 다음 DomNodeList가 가지고있는 프로퍼티와 메소드를 읽어 올 수 있습니다 (각 프로퍼티는 1 개뿐입니다). 각 노드에 액세스 할 수 있으면 DomElement obj에서 읽고 모든 마법에 액세스하는 방법을 읽을 수 있습니다. –

+0

단일 노드 만 일치한다고 기대한다면 Xpath에서 그것을 캐스팅하고 스칼라 값을 직접 얻을 수 있습니다 :'$ img = $ xpath-> evaluate ('string (// * [@ class = "productImage"]/@ src) '); – ThW

-1

당신은 실제로 할 필요가 없습니다 당신이 바로 이미지 후이고 그는 간단한 필터 다음에, DOMDocument::getElementsByTagName()을 사용하여 수행 할 수 있다는 것 때문에, 여기 XPath를 사용 : 다음

foreach ($dom->getElementsByTagName('img') as $image) { 
    $class = $image->getAttribute('class'); 
    if (strpos(" $class ", " productImage ") !== false) { 
     $url = $image->getAttribute('src'); 
     // do stuff 
    } 
} 

, 당신은 DOMElement::getAttribute()을 사용하여 src 속성을 얻을 수 있습니다 :

echo $image->getAttribute('src'); 
+0

strpos ("$ class", "productImage")가 OP의 샘플과 일치하지 않습니다. – ChrisJJ

+0

@ChrisJJ 당신은 무엇을 의미합니까? –

+0

죄송합니다, 실수. 무시하세요. – ChrisJJ