WEB Scrapingの情報は書籍を含めたくさんありますが,JavaScriptによって動的に生み出されるページのハンドリングに苦労しました.Selenium + PhantomJSが定番のようでしたが,うまくいかない場合が多く,人がマニュアルで行う操作を忠実に再現するアプローチが必要となる場合もあるようです.このような観点で,Chrome専用のPuppeteer(操り人形師の意味で,パピティアと発音)が有効でしたので,そのインストール方法と留意点をまとめておきます.こちらのページを参考にさせて頂きました.

Git for Windowsのインストール

Git-bashを使うため,Git for Windowsこちらのサイトからダウンロードし,デフォルトのままインストールします(ただし,デスクトップアイコンは作るを選択しておいた方が便利です).

nodistのインストール

nodistのGithubからNodistSetup-v0.8.8.exeをダウンロードし,普通にインストールします.インストールが完了しましたら,Git-bashのターミナルを起動し,以下のようにバージョンを確認します.

$ nodist -v
0.8.8

$ node -v
v8.11.1

$ npm -v
4.0.5

Node.jsのアップデート

次に,Git-bashを一度閉じ,再び起動します.再起動しないと,以下がうまくいきませんでした.こちらのサイトNode.jsStatusActive LTSとなっているもののReleaseバージョンを調べます.この記事を書いているときは,8.xとなっていました.以下のようにして,アップデートします.

$ nodist dist
  0.1.14
  0.1.15
  ...
  途中省略
  ...
  8.11.0
  8.11.1
  9.0.0
  9.1.0
  9.2.0
  9.2.1
  9.3.0
  9.4.0
  9.5.0
  9.6.0
  9.6.1
  9.7.0
  9.7.1
  9.8.0
  9.9.0
  9.10.0
  9.10.1
  9.11.0
  9.11.1
  10.0.0

8.xに相当する最新版は8.11.1であることが分かりましたので,これにアップデートします.

$ nodist 8.11.1

バージョンを確認しておきます.

$ node -v
v8.11.1

Yarnのインストール

以下のようにパッケージマネージャyarnをインストールします.

$ npm install -g yarn --scripts-prepend-node-path

WEB Scrapingを実行するフォルダを作成

実際にWEB Scrapingを実行する(JavaScriptのコードを保存する)フォルダを以下のように用意します.

$ pwd
/c/dat/Puppeteer/mpos

Puppeteerのインストール

用意したフォルダに移動し,package.jsonを作成し,続けてPuppeteerをインストールします.

$ winpty yarn.cmd init -y
$ yarn add puppeteer

以上でインストールは終わりです.

JavaScriptを動かす

JavaScriptのコードを作成し(例えば,test.js),実行します.

$ node test.js

なお,AnacondaMinicondaのプロンプトでも同様にJavaScriptを実行できます.私はJupyter Notebook上でPythonからsubprocess経由でnodeを呼び出しています.

test.jsの例

Yahoo! Japanのサイトのトップページの画像をpngとして出力する例です.

const puppeteer = require('puppeteer');
(async () => {
  const TARGET_URL = 'https://yahoo.co.jp';
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(TARGET_URL);
  await page.screenshot({path: 'example.png', fullPage: true});
  await browser.close();
})();

WindowsのローカルフォルダC:\home\test.htmlを読み込むにはTARGET_URL =の部分を以下のように書き換えます.

  const TARGET_URL = 'file://C:/home/test.html';

Cドライブを指定している部分のコロン:は必須です.

yarnでアップグレード

こちらのページが参考になります.Git Bashのターミナルでインストールを行ったディレクトリに移動します.

$ pwd
/c/dat/Puppeteer/mpos

ローカルのパッケージ全体のアップグレードは以下のようにします.

$ yarn upgrade

ローカルのパッケージを指定してアップグレードするには以下のようにします.

$ yarn upgrade [package]