PHPでのスクレイピング・SSRに便利な PuPHPeteer を使ってみた

スクレイピングとかSSR(サーバーサイドレンダリング)をしたい場合・・・

普通は nodejs の Phantom とか Puppetter とかを使うことが多いです。

でもとある事情で、どうしてもPHP側でスクレイピングがしたかったんです。

そこで見つけたのが PuPHPeteer というライブラリ

かなり便利でイイなと思ったので、
この PuPHPeteer の導入手順と使い方をまとめてみました

まず PuPHPeteer の仕組みについて

名前の通り、これは node.js の Puppeteer を PHP から使えるようにしたやつ

Pupetter は "パペッター" と読むから、 PuPHPetter は "パピエイチペッター" みたいな読み方?

まあそれはともかく、Puppeteer は次の機能があるライブラリです。

  • 画面のスクリーンショット取得
  • DOMの取得・解析・書き換え
  • 要素のクリックやスクロール

本当にサーバー側でDOM取得から何までできます。

なので構成が似ている商品ページやサービスのスクレイピングに便利ですね。
あとサーバーサイドレンダリング(いわゆるSSR)とかもできる模様

 

この Puppeteer をPHPから使えるのが PuPHPeteer というライブラリ

独立したものではなく、Pupeteer と PHP の橋渡し(ブリッジ)するためのもの です。

▼ なので次の点に注意が必要

  • 使用には Puppeteer 本体が必要
  • PuPHPeteer 単独では使えない

使用には node.js がいるので単独では使えません。

必ず node.js が使える環境を用意しとかないとダメ

PuPHPeteer の導入手順

それでは PuPHPeteer の導入手順を紹介

次のツーステップで導入できます。

1.node.js と Pupeteer のインストール

まず node.js の環境がないなら node.jsをインストール

その導入手順は次でまとめたので要チェック

node.js はサーバーも建てれるんですが、
今回はPHPを使うのでサーバーなんて大層なもの必要ありません。

そしたら npm から Puppeteer をインストール

ライブラリは node_modules ディレクトリ以下に配置されるはず

2.composerから PuPHPeteer をインストール

次は PuPHPeteer をインストール

コンポーザー(compsoer)を使ってインストするなら、次のコマンドを実行

ただし php_sockets.dll は必ず有効化しておく必要あり

もし無効なら php.ini から extension=sockets  の行をコメントインしておいてください。

早速 PuPHPeteer でマイブログのスクショを取ってみた

まず PuPHPPetter をいろいろ使って慣れてみることに、、、

その手始めとして自分のブログのスクショを取ってみました

 

そのコード例は次の通り

大事なポイントは次の3つ

  • まずブラウザを起動する
    このコードの $pupeteer->launch(...);   の部分。デフォルトだと動かなかったので、 --no-sandbox  と --disable-setuid-sandobox  を指定してる
  • ブラウザから対象ページを開く
    まず $browser->newPage();  でページオブジェクトを作成。そのあと $page->goto('https://...');  でページをレンダリングし、色々な処理ができる
  • 最後にブラウザを閉じる
    上記コードの $browser->close();  の部分

今回はスクリーンショットを取ってるだけ

でもスクショ以外にも、クリックイベントを起こしたり、スクロールさせたり、DOM要素の解析とかもできるみたいです。(まだ試してない)

あとそれから、このコードを動かすのに node.js でサーバーとか立てる必要ありません。
(というか node.js と Apache は共存できない)

 

ちなみに次が実際にとれたスクリーンショット

PuPHPeteerから自分のブログのスクリーンショットを撮ってみた

ちゃんと人間が見ているのと同じスクリーンショットが取得できました。

これはスクショ以外にも楽しいことができそう

ここまでのまとめ

PuPHPeteerを実際に使ってみたけど、かなり便利そうです。

スクショを撮る以外にも、サーバー側でDOM解析とかイベントを再現してアクセスしたいときに重宝するかもしれないので、いろいろ試したい気がします。

以上、PuPHPeteer の導入手順についてでした。

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください