2017-08-06 129 views
0

现在发现查询是否'$ NotXP-> query'=查询返回字符串?!如何在php DOMXPath对象中返回?

如何使下一个代码工作?

$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源需要信息的抓取

<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

你能告诉你想什么来实现的,可能是样本网址,人们可以使用测试任何可能的解决方案。 –

+0

@NigelRen,添加html源代码 – ALPHA

回答

2

我做了一些改变,以帮助我在调试代码。最主要的是你的XPath表达式是无效的,你总是可以尝试一个像FreeFormatter这样的站点,它允许你用一些示例源代码来检查你的表达式。

$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; 
} 

的XPath表达式尝试和检索每个元素的文本节点,将返回所有节点的列表,这个代码就假定有不在身边的实际内容有任何空格(和用途[0 ]来获取列表的第一个元素)。 wholetext只是DOMText元素的实际内容。

随着你给的样品含量(加上周边位我不得不发明),它给...

720x400 
mp3 
5.70 Gb 
15 
Download 
+0

$ link_download_url需要artibute'data-default' – ALPHA

+0

我已经改变了XPath来获取属性。 –