2016-05-15 90 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; 

      }   
     } 
    } 
} 

另外值得一提的是,這個數據是公開可用,它是隻用於個人用途。請不要評論版權侵權 - 我想要做的事情沒有錯。

我只是試圖颳去航班號,只有內部文本和站點後面的網址。任何幫助,我要去哪裏錯了?

附加測試提供我所需要的數據,但與行之間的同樣的錯誤:

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

鋁對,那些線是27線? –

+0

if語句之後的回顯。 – DARKOCEAN

+0

我很驚訝,如果語句評估爲真(但它必須如果你看到這個錯誤);當我查看該頁面的源代碼時,hrefs都是相對的。也許我不明白SimpleHTMLDOM是如何工作的。 –

回答

0

你試圖訪問一個空引用的元素在你的if語句本身,因爲不是所有的<TD>的標籤中有<A>標籤。當有在$td沒有<A>標籤,$td->find('a', 0)爲空,所以

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

是你的錯誤消息,說的去做:「試圖獲得[A] [A]非對象的屬性」。

您可以通過檢查的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中完成了這一點,它從同一個html元素中看到了整個URL而不僅僅是它的一部分。 – DARKOCEAN