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とすることでエラーは解消された。