PHPでスクレイピングを簡単におこなうためのライブラリ「PHP Simple HTML DOM Parser」で、以下のコードを実行したところエラーが発生した。
Uncaught Error: Call to a member function find() on bool
1 2 3 4 5 6 7 8 | <?php require_once './lib/simple_html_dom.php' ; $url = 'https://example.com' ; $html = @ file_get_contents ( $url ); $html = str_get_html( $html ); $title = $html ->find( 'title' , 0)->plaintext; |
対象のURL自体は問題なく開くことができるのだが、str_get_html関数により取得できるはずのDOM情報がbool(false)になってしまうのだ。
エラーの原因と解消法
エラーの原因はライブラリファイル「simple_html_dom.php」にあった。
str_get_html()関数の下記の部分が該当の箇所。
1 2 3 4 5 6 7 8 | function str_get_html(){ // ... 略 if ( empty ( $str ) || strlen ( $str ) > MAX_FILE_SIZE) { $dom ->clear(); return false; } } |
取得したコンテンツがMAX_FILE_SIZEを超える場合、falseを返すようになっているのだ。
確かにエラーが起きたページのボリュームはテキスト量がかなり多かった。
このエラーを解消する場合、MAX_FILE_SIZEの上限値を上げてやれば良い。
デフォルトでは600000となっていたが、ページのサイズに合わせて今回は1000000とすることでエラーは解消された。