ITエンジニアのTIPS集

Node.jsでシンプルにWebページの情報を取得する

 この記事はいわゆるWebスクレイピングを、Node.jsを使って行うときのサンプルコードの紹介になります。

目次

  1. 前提条件
  2. Crawlerモジュールのインストール
  3. 公式を参考にコードを書く
  4. 実行する
  5. 注意事項

1. 前提条件

 n などでnodeおよびnpmを任意のバージョンにしておく。

$ node --version
v10.10.0

 node周りはこちらを参考にさせていただきました。
参考: Ubuntuに最新のNode.jsを難なくインストールする


2. Crawlerモジュールのインストール

 npmで公式がクローラ用のモジュールを提供してくれているので、サクッとインストールします。
参考: crawler - npm

$ npm install --save crawler

(今回のソースコードを今後流用したかったので、package.jsonに保存するように–saveを付けています。)


3. 公式を参考にコードを書く

 今回はGoogle先生で「寿司屋」を検索したときの検索結果ページの情報から、検索結果の件数「約 ○○ 件」を抜き出したものになります。

var Crawler = require("crawler");
var c = new Crawler({
maxConnections: 10,
callback: function (error, res, done) {
if (error) {
console.log(error);
} else {
var $ = res.$;
let query = res.request.uri.query;
let splitedQuery = query.split('=');
let decodeQueryData = decodeURIComponent(splitedQuery[1]);

let searchResult = $('#resultStats').text();
console.log(decodeQueryData + ' = ' + searchResult);
}
done();
}
});

c.queue([
'https://www.google.com/search?q=' + encodeURIComponent('寿司屋'),
]);

(queueに入れる際にURLとパラメータを分ける方法がありますが今回は割愛)


4. 実行する

 実行すると以下のような結果が得られると思います。

$ node sample.js
寿司屋 = 約 146,000,000 件

 res オブジェクトの中に headers や request が入っているので、いろいろ処理に使えそうです。
 今回はリクエストパラメータが何であったかを雑なパーサーで抽出しています。

$('#[好きなタグID]')で結果のHTMLにあるIDから値が取れるようです、けっこう便利ですね。

 こんな感じでシンプルにWebページの情報を取得できます。


5. 注意事項

 クローラのようなものでWebページをスクレイピングする際は、アクセス負荷で先方にご迷惑にならないよう十分注意しましょう。
 サンプルを流用する際は、くれぐれも自己責任でよろしくお願いしますm(_ _)m