2017-09-14 53 views
0

我已經開始寫一個網站的刮刀,也將有履帶,因爲我需要經過一定的聯繫,但我得到這個錯誤:PHP簡單的HTML DOM解析器錯誤

PHP Fatal error: Uncaught Error: Call to a member function find() on null in D:\Projekti\hemrank\simple_html_dom.php:1129 Stack trace:

0 D:\Projekti\hemrank\scrapeit.php(37): simple_html_dom->find('ul')

1 D:\Projekti\hemrank\scrapeit.php(19): ScrapeIt->getAllAddresses()

2 D:\Projekti\hemrank\scrapeit.php(55): ScrapeIt->run()

3 {main} thrown in D:\Projekti\hemrank\simple_html_dom.php on line 1129

當我var_dump $ html變量時,我得到了所有標籤等的完整html,這就是爲什麼它說「調用一個成員函數find()爲null」,當$ html中有實際值時,這很奇怪。下面的代碼中,這不是工作的一部分:

 $html = new simple_html_dom(); 
     $html->load_file($baseurl); 
     if(empty($html)){echo "HTTP Response not received!<br/>\n";exit;} 
     $links = array(); 
     foreach ($html->find('ul') as $ul) { 
      if(!empty($ul) && (count($ul)>0)) 
      foreach ($ul->find('li') as $li) { 
       if(!empty($li) && (count($li)>0)) 
       foreach ($li->find('a') as $a) { 
        $links[] = $a->href; 
       } 
       else 
        die("NOT AVAILABLE"); 
      } 
     } 

     return $links; 

    } 

這是用PHP簡單的HTML DOM解析器一個共同的問題,就是有一個解決方案,或者我應該切換到一些其他類型的刮?

+0

PHP不提供['simple_html_dom'](http://php.net/results.php?q=simple_html_dom&l=en&p=all)類。 – axiac

+0

我認爲它應該只是'$ html = file_get_html($ baseurl);' –

+0

請參閱此鏈接(https://stackoverflow.com/questions/6832197/weird-error-using-php-simple-html-dom -parser) –

回答

0

我只是找你正在使用的lib,這是行1129:

return $this->root->find($selector, $idx, $lowercase); 

所以你的錯誤信息,告訴您$this->root類裏面null,因此沒有find()方法存在!

我不是lib的專家,因爲我使用了令人敬畏的DOMDocument解析HTML,但希望這可以幫助您瞭解發生了什麼。

而且,$html在您的代碼中永遠不會爲空,您在實例化時已經填充它!

+0

這是可能的,它可能是第一個'$ html-> find('ul')'這意味着'$ html-> load_file($ baseurl)'無法加載文件! – teeyo

+0

'var_dump($ html)',看看'root'實際上是在什麼地方設置的 – delboy1978uk

0

我建議以下變化:

$html->load_file($baseurl);$html = file_get_html($baseurl);

在我的VPS服務器時,它的工作原理與$html->load_file($baseurl);但我的專用本地服務器上它僅適用於$html = file_get_html($baseurl);

這解決了我的問題: - 呼叫成員函數find() null - simple_html_dom.php on line 1129