やりたかったこと
- サーバーレス環境でスクレイピングアプリを動かしたかった
- Knative試したかったのでコンテナ化する必要があった
nodejsでスクレイピングするアプリをサクッと作る
まずは好きなところにディレクトリ切って下記コマンドを叩く
npm init
出てくる質問は全てEnter連打した
次にスクレイピングに必要な selenium-webdriver
をインストール
https://www.npmjs.com/package/selenium-webdriver
npm install selenium-webdriver
scrapingするプログラムを書いていきます。今回はgoogle chromeが既にインストールされている前提で話を進めます。
vim example.js
const { Builder, By, Capabilities } = require('selenium-webdriver');
const capabilities = Capabilities.chrome();
capabilities.set('chromeOptions', {
args: [
'--headless',
'--no-sandbox',
'--disable-gpu',
'--window-size=1980,1200',
// other chrome options
],
});
(async function example() {
console.log('start google scraping');
const driver = await new Builder().forBrowser('chrome').withCapabilities(capabilities).build();
try {
await driver.get('https://www.google.com/?hl=');
const text = await driver.findElement(By.xpath('/html')).getText();
console.log(text);
} finally {
await driver.quit();
console.log('finish scraping');
}
}());
const sleep = time => new Promise((resolve) => {
setTimeout(() => {
resolve();
}, time);
});
puppeteerもサクッと立ち上げるのには良さそうだったけどブラウザがchromium縛りになるのが嫌だったので今回はWebdriver使いました
npm scriptsを定義する
package.json
のscriptsに以下のようにstartタスクを追加します
"scripts": {
"start": "node ./example.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
試しにスクレイピングを走らせてみます
npm start
fuga@hoge ~/D/g/scraping-sample> npm start
> scraping-sample@1.0.0 start /Users/a12711/Documents/git-localrepository/scraping-sample
> node ./example.js
start google scraping
Gmail
画像
ログイン
日本
プライバシー規約設定
広告ビジネスGoogleについて
finish scraping
うまくスクレイピングが動いてそうです
Dockerfileを作る
今回はサクッと作りたかったので、seleniumのstandalone-chromeのイメージを元にして、nodejsをインストールするDockerfileを作成しました
FROM selenium/standalone-chrome:3.141.59
WORKDIR /usr/src/app
COPY package*.json ./
USER root
RUN curl -SL https://deb.nodesource.com/setup_8.x | bash
RUN apt-get install -y nodejs
RUN npm install
COPY . .
CMD npm start
Docker Build
dockerが入っていない方はdocker desktop等でdocker入れてください
Dockerイメージを作成する
docker build -t sample/robot .
コンテナ起動
docker run sample/robot
fuga@hoge ~/D/g/scraping-sample> docker run sample/robot
> scraping-sample@1.0.0 start /usr/src/app
> node ./example.js
start google scraping
Gmail
画像
ログイン
日本
プライバシー規約設定
広告ビジネスGoogleについて
finish scraping
先程と同様のログが出ています
これでスクレイピングのアプリをDockerコンテナとして動かすことができました