Web系や機械学習を勉強中。医療におけるIT活用に興味があります。APIが提供されていない場合は、スクレイピングを行う必要があります。Lambda上のnode環境からPuppeteerというパッケージを用いてスクレイピングを行う方法を解説します。PuppeteerとはChromeを操作できるnodeライブラリです。私達がブラウザで行うような操作は大抵Puppeteerでも行えます。Chromium.扱いが簡単だし開発体制も盤石そうなので、nodeでスクレイピングをするなら第一候補になるでしょう。LambdaでPuppeteerを使うときの問題点Puppeteerで使われるChromiumはPuppeteerによって自動でダウンロードされます。したがって、通常の環境でPuppeteerを用いたスクレイピングを行うにはPuppeteer以外に何かをインストールする必要はありません。デフォルトのChromiumを用いるのが最も簡単で安全です。Lambda上でPuppeteerを動かす場合、デフォルトのChromiumを利用することはできません。PuppeteerにChromiumをダウンロードさせるとnode_modulesのサイズが非常に大きくなり、Lambdaの容量制限を超過してしまうからです。具体的には、Lambdaのデプロイパッケージサイズの制限は、圧縮済みで50MBですが、PuppeteerにChromiumをダウンロードさせてしまうと、これを超えてしまうということです。そこで、PuppeteerがダウンロードするChromiumの代わりに、それよりも軽量なserverless-chromeを使います。今回は、Lambdaで利用するので、特にその中にある@serverless-chrome/lambdaを用います。デフォルトのChromiumダウンロードを無効にする前述の通り、PuppeteerはデフォルトでChromiumをダウンロードしようとしてしまいますが、これはLambdaで動かす上では都合が悪いので、代わりにより軽量な@serverless-chrome/lambdaを用いたのでした。このままではnode_modulesにPuppeteer由来のChromiumと@serverless-chrome/lambda由来のChromiumの両方が存在してしまうので、PuppeteerのChromium自動ダウンロードを無効化する必要があります。そのためには、puppeteer_skip_chromium_download環境変数をtrueにします。一般的には、repositoryのpackage.jsonと同じ階層に.npmrcファイルを作成し、puppeteer_skip_chromium_download=trueと書き込みます。installするときに容量の大きいChromiumがダウンロードされることはなくなりました。それでは、実際に必要なパッケージを入れていきましょう。(単に操作を楽にする程度のもの。