スポンサードリンク

前置き

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)を書いてみました。

  1. cheerioのインストール
  2. $ npm install cheerio
    

  3. スクレイピングするコードを書く
  4. 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;
        };
    })();
    

  5. 実行します
  6. $ node scraping.js 
    200
    Get Data Finish!
    title : "  node.jsのテスティングフレームワークであるjasmine-nodeをインストールして使ってみる — Toroとトロは電子機械の夢を見るか"
    

はい、できてますね。

参考にしたサイト:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 - なりたい社畜(じぶん)になる

スポンサードリンク