2017-08-06 4 views
0

'$ NotXP-> query' = query return string ?!PHPのDOMXPathオブジェクトに戻るには?

次のコードを作成するには?私はコードをデバッグ中に私を助けるためにいくつかの変更を加えました

<tbody> 
             <tr class="item"> 
       <td class="column first video">720x400</td> 
       <td class="column audio">mp3</td> 
       <td class="column size">5.70 Gb</td> 
       <td class="column seed-leech"> 
        <span class="seed">15</span> 
        <span class="leech">26</span> 
       </td> 
       <td class="column updated">07.07.2017</td> 
       <td class="column consistence"><a href="javascript:void(0);" title="title in td" data-type="torrent-consistence" class="show-modal show-consistence" data-route="/hashinfo/12345?fields=files"></a></td> 
       <td class="column last download"> 
       <a class="button middle rounded download zona-link" 
    data-type="download" 
    data-zona="0" 
    data-torrent="" 
    data-default="url_data" 
    data-not-installed="" 
    data-installed="" 
    data-metriks="{'eventType': 'click', 'data' : { 'type': 'show_download', 'id': '84358'}}" 
    title="text in title" href="javascript:void(0);" >Download</a>    </td> 
+0

はあなたが達成しようとしているかを示す、そしておそらく人々が使用できるサンプルURLことができます可能な解決方法をテストします。 –

+0

@NigelRen、htmlソースを追加する – ALPHA

答えて

2

このコードからナイジェル-REN

@リクエストの

$xp = new \DOMXPath(@\DOMDocument::loadHTMLFile($url)); 

     $list = $xp->query('//table[@class="table-list quality series"] tbody'); 
     $link = $list->query('//tr[@class="item"]'); 

     $arr_links = []; 

     foreach ($link as $link_in_cycle) { 
      $link_quality = $link_in_cycle->query('//td[@class="column first video"]'); 
      $link_audio = $link_in_cycle->query('//td[@class="column audio"]'); 
      $link_size = $link_in_cycle->query('//td[@class="column size"]'); 
      $link_seed = $link_in_cycle->query('//td[@class="column seed-leech"] span[@class="seed"]'); 
      $link_download_url = $link_in_cycle->query('//td[@class="column last download"] a')->getAttribute("data-default"); 

htmlソースは、情報のグラブを必要とします。主なことは、XPath式が無効であることです。FreeFormatterのようなサイトを試すことができます。このサイトでは、いくつかのサンプルソースで式を確認することができます。

XPath式がしようとすると、すべてのノードのリストを返します。各要素内のテキストノードを取得
$doc = new \DOMDocument(); 
$doc->loadHTMLFile($url); 
$xp = new \DOMXPath($doc); 

$list = $xp->query('//table[@class="table-list quality series"]//tr[@class="item"]'); 
$arr_links = []; 

foreach ($list as $link_in_cycle) { 

    $link_quality = $xp->query('//td[@class="column first video"]/text()', $link_in_cycle)[0]->wholeText; 
    $link_audio = $xp->query('//td[@class="column audio"]/text()', $link_in_cycle)[0]->wholeText; 
    $link_size = $xp->query('//td[@class="column size"]/text()', $link_in_cycle)[0]->wholeText; 
    $link_seed = $xp->query('//td[@class="column seed-leech"]//span[@class="seed"]/text()', $link_in_cycle)[0]->wholeText; 
    $link_download_url = $xp->query('//td[@class="column last download"]//a/@data-default', $link_in_cycle)[0]->value; 

    echo $link_quality.PHP_EOL; 
    echo $link_audio.PHP_EOL; 
    echo $link_size.PHP_EOL; 
    echo $link_seed.PHP_EOL; 
    echo $link_download_url.PHP_EOL; 
} 

、このコードは想定しない実際のコンテンツ(および使用の周りの空白がありません[0 ]を押してリストの最初の要素を取得します)。 wholetextは、DOMText要素の実際の内容に過ぎません。それが与えるあなたが与えたサンプルコンテンツ(プラス私が発明した周囲のビット)で

...

720x400 
mp3 
5.70 Gb 
15 
Download 
+0

$ link_download_urlがアーティファクトを必要とする 'data-default' – ALPHA

+0

属性を取得するようにXPathを変更しました。 –

関連する問題