Nodejs爬虫実戦(一):引き出し新熱ランキング


NodeJsとは
Node.jsはChrome V 8エンジンベースのJavaScript実行環境です.Node.jsは、イベント駆動で非ブロックI/Oのモデルを使用し、軽量で効率的です.Node.jsのパッケージマネージャnpmは、世界最大のオープンソースライブラリ生態系です.
私たちの最初のnodejsプロジェクトを開きます
まずnodejsの公式サイトに行ってnodejsをダウンロードしてインストールすることができますhttp://nodejs.cn/.インストールが完了したら、npmでexpressフレームnpm install express --saveをインストールします.
//app.js
//   `express`   
var express = require('express');

//   express            app   。
var app = express();

// app        ,         get、post、put/patch、delete,           get   ,     `/`        handler   。
//    handler       req   res     ,         request   response。
// request               ,   query  ,body  ,headers     ,      req      。
// res   ,           ,                   ,   header   ,             。          #send   ,           。
app.get('/',function(req,res){
  res.send('hello world');
})

//       app      ,        3000   。              ,   listen        ,                ,           。
app.listen(3000, function () {
  console.log('app is listening at port 3000');
});
node app.jsを実行してアクセスhttp://localhost:3000/hello worldが見えます
爬虫類依存
工欲善其事必先利其器,完成nodejs爬虫類には2つのライブラリが必要である:superagent(http://visionmedia.github.io/superagent/)はhttp側のライブラリであり、getまたはpostリクエストを開始できます.cheerio(https://github.com/cheeriojs/cheerio )は、Webページからcss selectorでデータを取得するためのNode.js版のjqueryと理解でき、jqueryと同じように使用されています.npm install superagent --save npm install cheerio --saveをそれぞれ取り付けます.
引き出しの新しいホットリストのデータをつかむ
まず簡単なことから、引き出しの新しい熱ランキングを例に挙げましょう.アクセスhttp://dig.chouti.com/ブラウザのデバッガで引き出しのdom構造を見ると、.part 2のクラスに共有用の属性があり、jqueryの構文でタイトル、ピクチャ、ハイパーリンクの属性を直接読み取ることができます.
新しいホットランキングデータはidが「content-list」のdivにあることがわかり、content-listを展開してデータの表示を続行します
classが「part 2」のdivにshareが入っているのを見つけた
app.js
//   `express`   
var express = require('express');
//   `superagent`  
var superagent = require('superagent');
//   `cheerio`  
var cheerio = require('cheerio');
//   express            app   。
var app = express();

// app        ,         get、post、put/patch、delete,           get   ,     `/`        handler   。
//    handler       req   res     ,         request   response。
// request               ,   query  ,body  ,headers     ,      req      。
// res   ,           ,                   ,   header   ,             。          #send   ,           。
app.get('/', function (req, res, next) {
  //   superagent     http://dig.chouti.com/    
  superagent.get('http://dig.chouti.com/')
    .end(function (err, sres) {
      //        
      if (err) {
        return next(err);
      }
      // sres.text          html   ,     cheerio.load   
      //            jquery      ,            `$`
      //       jquery     
      var $ = cheerio.load(sres.text);
      var items = [];
      $('#content-list .part2').each(function (idx, element) {
        var $element = $(element);
        items.push({
          title: $element.attr('share-title'),
          href: $element.attr('href'),
          img: $element.attr('share-pic')
        });
      });

      res.send(items);
    });
});

//       app      ,        3000   。              ,   listen        ,                ,           。
app.listen(3000, function () {
  console.log('app is listening at port 3000');
});
node app.jsアクセスの実行:http://localhost:3000/,キャプチャしたデータが直接json形式で表示されていることがわかる.