2017-09-14 15 views
0

私はいくつかのリンクを通過する必要があるためにも、クローラを持っています1つのサイトのスクレーパーを書き始めましたが、私はこのエラーを取得しています: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

私は$ html変数をvar_dumpするときに、すべてのタグなどを使って完全なhtmlを取得するので、$ htmlに実際に値が入っているときに、「nullのメンバー関数を呼び出す」と言うのは私にとっては奇妙なのです。ここで働いていないコードの一部です:

 $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=ja&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->rootnullであることを語っているので何もfind()方法は存在しません!

私はHTMLの解析に素晴らしいDOMDocumentを使用しているので、私はlibの熟練者ではありませんが、これが何が起こったのかを理解するのに役立ちます。

また、$htmlはあなたのコードでは空になることはありません。インスタンス化したときにすでに値が設定されています。

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

に私のVPSサーバー上で、それは$html->load_file($baseurl);でなく、これは私の問題を解決し、それが唯一の$html = file_get_html($baseurl);

で動作します私の専用のローカルサーバー上で動作します:

+0

'$ html-> load_file($ baseurl)'がファイルを読み込めなかったことを意味する最初の '$ html-> find( 'ul')'である可能性があります。 – teeyo

+0

'root 'が実際にどのように設定されているかを見る' var_dump($ html) ' – delboy1978uk

0

は、私は次のように変更を提案 - メンバー関数へのコールfind() on null - simple_html_dom.phpオンライン1129

関連する問題