NodeJSでスクレイピング


概要

NodeJSでスクレイパーを作った話です。
技術要素
cheerioはNodeJSのスクレイピングモジュールです。これを使うと、jQueryの要領で要素を取得できます。超便利です。
NodeJSでJSONを返すAPI作って、あとはクライアントが好きにすればいいかと思ってます。

NodeJS インストール ~ Express起動

NodeJSインストール
前回を参考に入れていきます。
ExpressやNodeモジュール諸々インストール
# 色々聞かれるのでよしなに設定(Enter連打でもOK)
npm init

npm install express --save
# Express プロジェクト雛形作成用にexpress-generatorインストール
npm install -g express-generator

# プロジェクト作成
express 【プロジェクト名】

# package.json内のモジュールインストール
cd 【プロジェクト名】
npm install

# その他小庵階必要なNodeモジュールインストール
npm install cheerio-httpcli
npm install http

# Express起動
node ./bin/www
ブラウザで「http://サーバアドレス:3000」を開くとExpressの起動を確認できます
※ リッスンポートは プロジェクトルート/bin/www の15行目当たりで決まっています。
var port = normalizePort(process.env.PORT || '3000');

cheerioでスクレイピング

Node.js用のスクレイピングモジュール「cheerio-httpcli」の紹介
Node.jsのスクレイピングモジュール「cheerio-httpcli」が第3形態に進化したようです
を参考にゴネゴネします。
サクッと動かしたかったので、プロジェクト/route/index.js にscrapingを追加しました。
こんな感じです。
var express = require('express');
var router = express.Router();
var client = require('cheerio-httpcli'); // スクレイピング

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.get('/scraping', function(req, res, next) {

  client.fetch('https://www.google.co.jp/', {}, function (err, $, result) {
    var resJson = {};
    resJson.header = result.headers;
    resJson.title = $('title').text(); // jQueryのセレクタと同じ要領で要素を取得できる

    resJson.link = [];

    // リンク一覧を取得
    $('a').each(function (idx) {
        resJson.link.push(($(this).attr('href')));
    });
    res.header('Content-Type', 'application/json; charset=utf-8');
    res.send(resJson);
  });
});

module.exports = router;
ブラウザで「http://サーバアドレス:3000/scraping」へアクセスるとJSONが返ってくることを確認できます。あとは、クライアント側でJSONを好きにすればOKです。

注意事項!!!

スクレイピングを行う際は対象のサーバに負荷をかけすぎないよう、取得間隔をあけるなどしてください。
岡崎市立中央図書館事件
の例があるので、、、。

0 件のコメント :

コメントを投稿