phantomjsはもう古いpapeteerを使った今どきのスクレイピング

2020年2月28日

テクノロジー

「スクレイピング」と掛けまして、 「幼稚園の主役」と、ときます。 そのココロは・・・ 自動(児童)です。 RPAが大好きな、ユゲタです。 これまで、phantomjsで便利にスクレイピング処理をやってきていたんですが、2018年にphantonjsの開発が2018年6月に終了していたんですね。 https://jser.info/2018/06/11/phantomjs-ended/ そこで、それに変わるシステムを構築しなくてはいけなくなったので、探してみた所、GoogleのChromeチームがデバッグ機能として使用しているツールを、ヘッドレスブラウザとして公開している事を知りました。

Puppeteer

https://github.com/puppeteer/puppeteer/ githubにアップされているコードもかなり参考になりますが、環境へのインストールはnpmで行うのがよさそうです。 npm i puppeteer 基本的に、何ができるのかというと、ヘッドレスブラウザとしての機能は十分に備えています。 WEBサイトの画面キャプチャや、サイト内でのjavascriptの実行、色々なイベントアクションの実行などなど・・・ すでにたくさんのエンジニアが、使い方ブログをアップされているので、非常に参考になります。

参考

Puppeteerでできることまとめ Puppeteerのセットアップから使い方まで〜ブラウザ操作の自動化〜 puppeteerでスクレイピング Puppeteerの使い方(スクレイピング, フロントテストで活用) Puppeteerでスクレイピング puppeteerを用いてラクスのエンジニアブログに自動でアクセスしてみた まだまだあります。 Googleで検索

phantomjsとの違いについて

僕の環境では、Phantomjsシステムからのリプレイス作業をしなければいけないのですが、相違点はどんなところがあるかというと、 個人的にネイティブjavascriptで作った自分ライブラリを便利に使いたかったので、casperjsとspookyjsを組み合わせた環境で使っていたので、非常にややこしい環境だったのが、puppetter1つのみの環境になったので、非常にシンプルになりました。 出来ることは、そんなに大差ないのですが、今後時間があれば、速度比較などはやっておきたいですね。 あと、phantomjsは開発が終了しているので、今後使い続ける理由がなくなったので、比較すること自体無意味ですね・・・

試しにやった画面キャプチャ

他サイトで紹介されているやり方をそのまま実行してみたらまともに動かない事が多かったので、よくよく考えてみた所、サーバーで利用したい場合、Chromeブラウザがインストールされている必要がありました・・・そらそうですよね・・・ テストツールとして使っている人は、macなどにインストールされているchromeブラウザを自動操作するような使い方をしているケースもありましたね。 個人的にはRPAとして、サーバーでのヘッドレスブラウザで使いたかったので、Chromiumをインストールして使うことにしました。 ローカル環境で便利に使えるようにとDockerにnodejs用のコンテナを立ち上げて使用するのが自分流です。(今どきの一般的ですかね) その際に問題が発生したんですが、日本語ページが文字化けしてしまいました。 これは、サーバー側に日本語フォントをインストールすることで解決したので、以下のDockerファイルをその時に使用したので、お困りの方は、使ってみてください。 FROM node:12.4.0-alpine RUN apk update \ && apk add --no-cache curl fontconfig \ && curl -O https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \ && mkdir -p /usr/share/fonts/NotoSansCJKjp \ && unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \ && rm NotoSansCJKjp-hinted.zip \ && fc-cache -fv RUN apk add --no-cache chromium RUN apk add --no-cache yarn

やっぱりGoogle、リファレンスがイケてる

https://github.com/puppeteer/puppeteer/blob/master/docs/api.md Puppeteerは、リファレンスもなかなかのボリュームなのですが、サンプルコードなどものせていて、かなりわかりやすくなっています。 え?英語が読めないって?そこは、エンジニアなら英語も修得しましょうよ、と自分に言い聞かせるユゲタでした。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。