2013年12月11日のすごい広島で「node.jsでjQueryのようにスクレイピングする方法」を調べたので、まとめておきます。
node.jsでjQueryのようなセレクタを使ってスクレイピングする方法ですが、node.jsのパッケージモジュールの「cheerio」を使います。
var $ = require("cheerio").load(htmlData); var title = $('title').text();
今回はこのブログの「node.jsのテスティングフレームワークであるjasmine-nodeをインストールして使ってみる」をスクレイピングして、ページタイトルを取得するソースコード(scraping.js)を書いてみました。
$ npm install cheerio
scraping.js
(function() { var _http = require('http'); var _cheerio = require("cheerio"); // スクレイピングするためにHTMLをjQueryのように使えるモジュール var _URL = 'http://106n.net/toro/blog/?p=1141'; // 取得するWebページ // Webページを取得 _http.get(_URL, function(res){ var _statusCode = res.statusCode; console.log(_statusCode) if(_statusCode != 200) { // 200ではない場合は失敗 return; } var _resData = ''; res.on('data', function (chunk) { _resData += chunk; }); res.on('end', function () { console.log('Get Data Finish!') parseResponseData(_resData); }); }).on('error', function(e) { cosole.log('Error!') }); function parseResponseData(resData) { var _ret = {}; // ページデータを読み込む var $ = _cheerio.load(resData); // <head>を取り出す var _$head = $('head'); if(_$head.length < 1) { console.log('Error: not found head tag.'); return _ret; } // <head>の中の<title>を取り出す var _$title = _$head.find('title'); if(_$title.length == 1) { var _title = _$title.text(); // これが取りたいデータ console.log('title : "' + _title + '"'); _ret.title = _title; } return _ret; }; })();
$ node scraping.js 200 Get Data Finish! title : " node.jsのテスティングフレームワークであるjasmine-nodeをインストールして使ってみる — Toroとトロは電子機械の夢を見るか"
はい、できてますね。
参考にしたサイト:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 - なりたい社畜(じぶん)になる
RSSを取得する