2016-05-15 4 views
1

Попытка скопировать данные из таблицы на веб-сайт. Я получил следующий PHP написанный, но он не работает. получилЦикл через таблицу с простым HTML DOM

После ошибки: Примечание: Попытка получить имущество не-объект в DataScraping.php на линии 27

//Sets the HTML DOM Library 
require_once 'C:/xampp/php/lib/SimpleHTMLDOM/simple_html_dom.php'; 

$html = new simple_html_dom(); 
$html = file_get_html('https://www.flightradar24.com/data/flights/british-airways-ba-baw'); 

foreach($html->find('table[id=tbl-datatable]') as $datatable) { 

    foreach($datatable->find('tr') as $tr) { 

     foreach($tr->find('td') as $td) { 

      if(strpos($td->find('a', 0)->href, 'https://www.flightradar24.com/data/flights/') !== false) { 

       echo $td->find('a', 0)->innertext .", " .$td->find('a', 0)->href; 

      }   
     } 
    } 
} 

Также стоит отметить, эти данные доступны и публично это только для личного пользования , Пожалуйста, не комментируйте нарушение авторских прав - нет ничего плохого в том, что я хочу делать.

Я просто пытаюсь очистить только номер рейса, как внутренний текст, так и URL-адрес, который находится за ним. Любая помощь в том, где я ошибаюсь?

Дополнительный тест дает мне данные, но с той же ошибкой в ​​междурядьях:

foreach($html->find('table[id=tbl-datatable]') as $datatable) { 

    foreach($datatable->find('tr') as $tr) { 

     foreach($tr->find('td') as $td) { 

      if (strpos($td->find('a', 0)->href, '/data/flights/') !== false) { 

       $test = $td->find('a', 0)->href; 
       $test2 = $td->find('a', 0)->innertext; 
       echo $test .", " .$test2; 

      }  
     } 
    } 
} 
+0

Al правильно, так какая из этих строк линия 27? –

+0

Эхо после утверждения if. – DARKOCEAN

+0

Я удивлен, если оператор if оценивает true (но он должен, если вы видите эту ошибку); когда я рассматриваю источник этой страницы, hrefs все относительны. Возможно, я не понимаю, как работает SimpleHTMLDOM. –

ответ

0

Вы пытаетесь получить доступ к элементам нулевой ссылки в вашем самом if заявления, потому что не все <TD> теги имеют <A> теги в них. Когда нет <A> тега в $td, $td->find('a', 0) равно нуль, так

$td->find('a', 0)->href 

является только то, что ваше сообщение об ошибке сказало: «пытаюсь получить [а] свойство [а] не-объекта».

Вы можете исправить это, проверяя результат find() для нуля с if:

$atag = $td->find('a', 0) 
if ($atag) { 
    // ... 
} 

И вы можете сложить это в ваше единое if заявление с оператором &&. У вас есть еще несколько проблем, которые я нашел при выполнении кода:

  • в источнике этого сайта, то hrefs в таблице все относительный, а не абсолютный, поэтому, когда вы проверить 'https://www.flightradar24.com' вы не найдете ни одного из них
  • вы не добавляя символ новой строки в конце вашего echo

Итак, подведем итог моих предложений, что-то вроде этого, кажется, работает:

foreach($tr->find('td') as $td) { 
    $atag = $td->find('a', 0); 
    if($atag && strpos($atag->href, '/data/flights/') !== false) { 
     echo $atag->innertext . ", " . $atag->href . "\n"; 
    }   
} 
+0

Спасибо за ваше предложение. Я заметил проблему с hrefs, в которую я поменял мою обновленную версию. Хорошее место! Это странно, поскольку я делал это ранее в VBA, который видит весь URL-адрес, а не только его часть, из одного и того же элемента html. – DARKOCEAN

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