2016-05-15 118 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