2017-12-23 19 views
2

각 컨테이너의 , src영화 이름을 얻으려고합니다. item-holder-account.PHP가 DOM을 가로 질러 속성과 텍스트를 얻습니다.

<div id="item_container"> 
    <div class="item-holder-account"> 
     <a href="movie1.html"> 
      <span class="rollover"></span> 
      <img src="movie1.png" alt=""> 
      <h2 class="list-item-title">Movie 1 <span class="paragraph-end"></span></h2> 
     </a> 
    </div> 

    <div class="item-holder-account"> 
     <a href="movie2.html"> 
      <span class="rollover"></span> 
      <img src="movie2.png" alt=""> 
      <h2 class="list-item-title">Movie 2 <span class="paragraph-end"></span></h2> 
     </a> 
    </div> 

    <div class="item-holder-account"> 
     <a href="movie3.html"> 
      <span class="rollover"></span> 
      <img src="movie3.png" alt=""> 
      <h2 class="list-item-title">Movie 3 <span class="paragraph-end"></span></h2> 
     </a> 
    </div> 
</div> 

결과는 배열에 있어야합니다 :

movie1.html 
movie2.png 
Movie 1 

movie2.html 
movie2.png 
Movie 2 

movie3.html 
movie3.png 
Movie 3 

나는 시도했다하지만 난 여기에 붙어있어 :

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$elements = $dom->getElementById('item_container'); 

$data = array(); 
foreach($elements as $node){ 
    foreach($node->childNodes as $child) { 
    } 
} 

가 어떻게이 문제를 해결합니까?

+0

이 PHP를 사용하는 어떤 특별한 이유? 이것은 JavaScript로 더 쉽게 할 수 있습니다. – NaijaProgrammer

+0

이 스크립트는 cron을 통해 실행됩니다. – mdnba50

+1

각 자식 노드에 대해'getAttribute'를 사용하여 자식이'item-holder-account' 클래스를 가지고 있는지 테스트 해보십시오. 그렇다면, 원하는 값을 추출하십시오. – NaijaProgrammer

답변

0

당신은 내가 domxpath와 함께 갈 것 PHP Simple HTML DOM Parser

<?php 
$str = '<div id="item_container"> 
     <div class="item-holder-account"> 
     <a href="movie1.html"> <span class="rollover"></span> 
           <img src="movie1.png" alt=""> 
           <h2 class="list-item-title">Movie 1 <span class="paragraph-end"></span></h2> 
      </a> 
     </div> 
     <div class="item-holder-account"> 
     <a href="movie2.html"> <span class="rollover"></span> 
           <img src="movie2.png" alt=""> 
           <h2 class="list-item-title">Movie 2 <span class="paragraph-end"></span></h2> 
      </a> 
     </div> 
     <div class="item-holder-account"> 
     <a href="movie3.html"> <span class="rollover"></span> 
           <img src="movie3.png" alt=""> 
           <h2 class="list-item-title">Movie 3 <span class="paragraph-end"></span></h2> 
      </a> 
     </div> 
     </div>'; 
require 'simple_html_dom.php'; 

$html = str_get_html($str); 
$arr = array(); 
foreach($html->find('.item-holder-account') as $element){ 
    $subarr = array(); 
    foreach($element->find('a') as $a){ 
     $subarr[] = $a->href; 
    } 
    foreach($element->find('img') as $a){ 
     $subarr[] = $a->src; 
    } 
    foreach($element->find('h2') as $a){ 
     $subarr[] = $a->innertext; 
    } 
    $arr[] = $subarr; 
} 
echo '<pre>'; 
var_dump($arr); 
echo '</pre>'; 



/* output 
array(3) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(11) "movie1.html" 
    [1]=> 
    string(10) "movie1.png" 
    [2]=> 
    string(43) "Movie 1 " 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(11) "movie2.html" 
    [1]=> 
    string(10) "movie2.png" 
    [2]=> 
    string(43) "Movie 2 " 
    } 
    [2]=> 
    array(3) { 
    [0]=> 
    string(11) "movie3.html" 
    [1]=> 
    string(10) "movie3.png" 
    [2]=> 
    string(43) "Movie 3 " 
    } 
} 
*/ 
1

같은 DOM 파서를 사용할 수 있습니다. 귀하의 예에 따르면 item-holder-account 클래스를 가지고있는 모든 div을 쿼리 한 다음 필요한 데이터를 추출 할 수 있습니다.

<?php 

$file = $argv[1]; 
$html = file_get_contents($file); 
$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 

$data = []; 
foreach($xpath->query('//div[@class="item-holder-account"]') as $div) { 
    foreach($div->getElementsByTagName('a') as $item) { 
     $data[] = [ 
      'href' => $item->getAttribute('href'), 
      'img' => $item->getElementsByTagName('img')->item(0)->getAttribute('src'), 
      'text' => $item->getElementsByTagName('h2')->item(0)->nodeValue, 
     ]; 
    } 
} 

print_r($data); 

결과 : 다음 스크립트는 당신이 원하는 일을해야

Array 
(
    [0] => Array 
     (
      [href] => movie1.html 
      [img] => movie1.png 
      [text] => Movie 1 
     ) 

    [1] => Array 
     (
      [href] => movie2.html 
      [img] => movie2.png 
      [text] => Movie 2 
     ) 

    [2] => Array 
     (
      [href] => movie3.html 
      [img] => movie3.png 
      [text] => Movie 3 
     ) 

)