2017-12-23 7 views
2

src各コンテナの動画名を取得しようとしていますitem-holder-accountPHPが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

子ノードが 'item-holder-account'のクラスを持っているかどうかをテストするために、各子ノードに' getAttribute'を使ってみてください。そうであれば、そこから必要な値を抽出します。 – 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 
     ) 

) 
関連する問題