概要
NodeJSでスクレイパーを作った話です。技術要素
- サーバサイド
- OS:CentOS 6.X
- NodeJS + Express
- NodeModule
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 件のコメント :
コメントを投稿