概要
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 件のコメント :
コメントを投稿