Posted at

php-phantomjsで取得したhtmlをphpQueryでスクレイピング

More than 1 year has passed since last update.


経緯

JSによるレンダリング後のhtmlをスクレイピングしたかったので、phantomjsを使用。

他のページはそういう感じではなく、phpQueryでスクレイピングしていた。

そのためこういう事になりました。


方法

理由はよくわからんが、いい感じになってくれないので、

DOMDocumentにしてからphpQueryに食わせないといけなかった。

//phantomjsでhtmlをとってきて

$client = Client::getInstance();
$client->getEngine()->setPath(PHANTOMJS_PATH);
$request = $client->getMessageFactory()->createRequest();
$response = $client->getMessageFactory()->createResponse();
$request->setUrl($url);
$client->send($request, $response);
$html = $response->getContent();

//DOMDocumentにする
$dom = new DOMDocument;
@$dom->loadHTML($html); //$htmlになんらかのHTML的invalidがあるので、@をつける
$dom->saveHTML();

//そしてphpQueryでスクレイピングする
$doc = new phpQuery::newDocument($dom);

確認した環境は PHP 7.1.16 です。