2015-05-26 3 views
0

Как получить только одну ссылку из таблицы?PHP scrape ссылки из таблицы

<table> 
     <tr class="title"> 
     <td width="40%">a </td> 
     <td width="40%">b</td> 
     <td width="10%">c</td> 
     <td width="10%">d</td> 
     </tr> 
     <tr> 
     <td>abc.com</td> 
     <td>123.123.526.12</td> 
     <td><a class="update" href="fruit/grape"</a></td> 
     <td><a class="delete" href="fruit/grape"></a></td> 
     <td> </td> 
     </tr> 
     <tr> 
     <td>bcd.com</td> 
     <td>123.256.33.123</td> 
     <td><a class="update" href="fruit/apple"></a></td> 
     <td><a class="delete" href="fruit/apple"></a></td> 
     <td> </td> 
     </tr> 
     </table> 

мой код:

$html_doc = new DOMDocument; 
libxml_use_internal_errors(true); 
$html_doc->loadHTML($html); 
libxml_clear_errors(); 
$html_xpath = new DOMXPath($html_doc); 

$link1 = $html_xpath->query('//table/tr[not(contains(@class,"title"))]'); 
foreach($link1 as $a) 
{ 
    $bac = $a->nodeValue; 
    echo $bac."<br>"; 
    $rows = $a->getElementsByTagName("a"); 
    foreach ($rows as $row) 
    { 
     echo $row->getAttribute("href")."<br>"; 
    } 
} 

Выход:

abc.com 123.123.526.12 
    fruit/grape 
    fruit/grape 
    bcd.com 123.256.33.123 
    fruit/apple 
    fruit/apple 

Код выше возврата 2 атрибута HREF для меня. мой ожидаемый результат - один атрибут href для каждой строки.

Моего ожидаемый выход:

 abc.com 123.123.526.12 
     fruit/grape 
     bcd.com 123.256.33.123 
     fruit/apple 

Как я могу сделать это, чтобы соответствовать моему ожидаемому результату?

+0

бы вы размещаете из вывода, сгенерированного? –

ответ

1

Ну, это потому, что вы эхо каждого якоря. Вы можете поместить их в массив и проверить, если вы уже собрали эту ссылку:

$all_links = array(); 

foreach($link1 as $a) 
{ 
    $bac = $a->nodeValue; 
    $all_links[$bac] = array(); 
    $rows = $a->getElementsByTagName("a"); 

    foreach ($rows as $row) 
    { 
     $href = $row->getAttribute("href"); 
     if (!in_array($href, $all_links[$bac])) { 
      $all_links[$bac][] = $href; 
     } 
    } 
} 

Ссылка возиться: http://phpfiddle.org/main/code/e9y3-23gw

Мой выход:

Array 
(
    [abc.com  123.123.526.12] => Array 
     (
      [0] => fruit/grape 
     ) 

    [bcd.com  123.256.33.123] => Array 
     (
      [0] => fruit/apple 
     ) 

) 
+0

он все еще возвращает 2 якоря ко мне .. –

+0

Нет, это не так, вы должны использовать '$ all_links' вместо этого. Попробуйте 'var_dump ($ all_links)'. Я обновил свой ответ с выходом, который я получаю. – redelschaap

Смежные вопросы