
スクレイピングをやるのは、「対象のホームページに書かれている文字をHTMLを取得して探し出せばいい」という事で、比較的簡単に考えていた人は、
その後、大きな壁がある事に気がつくはずです。
それが、入力フォームや、特定の条件によりページが変動する、動的ページのスクレイピングです。
最近のホームページでは、こういう動的ページが増えてきている上、
SPA(Single Page Application)と呼ばれる、まるでスマホアプリのようなホームページ(ページアプリケーション)も多くなってきました。
こうしたページを取得するために、色々なツールが用意されているので、今回はその中で比較的扱いやすい "Puppeteer" をDocker環境で構築して、簡単なスクレイピングができる環境構築をしたいと思います。
Docker環境の構築
今回の記事は、ほとんどの人が、MacまたはWindowで、スクレイピング処理を手元で行う事を想定しています。
どの場合は、"Docker Desktop" アプリを事前にインストールしておいてください。
以下のリンクからダウンロードできるので、ご自身の環境に合わせてダウンロードしてから、インストールまで完了させてください。
https://www.docker.com/ja-jp/products/docker-desktop/
Docker Composeのセット
gitがインストールされている場合は、次の場所から、リポジトリをcloneしてソース一式を取得してください。
https://github.com/yugeta/scrape_url2title
もし、gitがインストールされていない場合は、githubページから、zipファイルでダウンロードして、解凍して使ってもらっても大丈夫です。
clone(または、zip解凍)すると、できたフォルダ内は次の様に構成されているはずです。
/
├ compose.yaml
├ Dockerfile
├ index.js
├ package.json
└ README.md
その他のファイルやフォルダは、今の段階では無視してもらって大丈夫です。
モジュールが準備できたら、次のコマンドを入力していきましょう。
コマンドは、macの場合は、ターミナルで操作してもらい、windowsは、wsl(またはpower shell)で操作してください。
1. Docker Build
dockerのイメージを構築する、ビルド操作です。
docker compose build
2. Puppeteerのインストール
nodeのモジュールである "Puppeteer" をインストールします。
docker run --rm -v $PWD:/app -w /app node npm install
上記でエラーが出ない状態でコマンドが終了したら、準備完了です。
URLからページタイトルを取得
環境構築したdockerのイメージには、Nodejsが構築されているので、
その環境を元に、Puppeteerを使って、URLからページタイトルを取得してみます。
以下のコマンドを実行すると、タイトル取得ができるはずです。
docker-compose run --rm scraper node index.js --url=https://yahoo.co.jp
実行した結果は以下の様になっていれば、成功です。
Scraping : Title of https://yahoo.co.jp is: "Yahoo! JAPAN"
色々なURLで試してみる
コマンドの次の箇所を変更すると、色々なURLで実行する事ができます。
(黄色い箇所を変更してみてください)
--url=https://yahoo.co.jp
解説
コマンドで操作をするのが苦手な人は、少ししんどい操作かもしれませんが、
dockerを起動して、index.jsを実行する時に、URLをクエリでセットするコマンドを一行に書いているだけなので、
環境構築ができて、なれると、コピペでどんどんスクレイピングができるようになるはずです。
Dockerの構成も比較的シンプルで、composer.yamlで一括起動するようにして、jsプログラムなどを読み込む設定にしてあり、
今後のスクレイピングのプログラミングを作り込んでいける様な構成にしています。
Dockerfileは、nodejsのslimという、容量が軽いモノをインストールするようにしているので、できる限りコンパクトになるように心がけておきました。
Puppeteerは、GoogleChromeのサーバー版である、Chromiumを操作するモジュールです。
GoogleChromeは、バージョンアップも比較的早いタイミングで行われるために、どちらも常に最新バージョンにしておく必要があるので、Puppeteerは、latestとして、最新バージョンを取得する様にしています。
あとがき
Puppeteerを使用するために、Nodejsをローカル環境に構築するのは、Dockerでやるのが一番効率的だと思い、今回の環境構築構成にしました。
複数人で使う場合は、実際のサーバー(AWSやクラウドサーバーなどがいいかも)に構築して使うと、かなり便利に使えると思います。
次回は、この環境を使って難易度の高いスクレイピングを実行してみたいと思います。
0 件のコメント:
コメントを投稿