在node.js中,有了 cheerio 模块、request 模块,抓取特定URL页面的数据已经非常方便。

  一个简单的就如下

var request = require('request');
var cheerio = require('cheerio');

request(url,function(err,res){
    if(err) return console.log(err);
    var $ = cheerio.load(res.body.toString());
     
    //解析页面内容

});

   有了基本的流程,现在找个web地址(url)试试。就以博客园的搜索页为例。

   通过搜索关键词 node.js 

  node.js抓取数据(fake小爬虫)

  得到如下的URL:

  http://zzk.cnblogs.com/s?t=b&w=node.js

  点击第二页,URL如下:

  http://zzk.cnblogs.com/s?t=b&w=node.js&p=2

  分析URL,发现w= ?为要搜索的关键词 p= ?为页码。 

  借助 request 模块请求URL 

var request = require('request');
var cheerio = require('cheerio');

var key = 'node.js', page = 1;
var url = 'http://zzk.cnblogs.com/s?t=b&w='+ key +'&p='+ page;

request(url, function(err, res) {
    if (err) return console.log(err);
    var $ = cheerio.load(res.body.toString());
    var arr = [];
    //内容解析
    
    
});

  现在URL有了,分析下URL对应的页面内容。

  node.js抓取数据(fake小爬虫)

  页面还是很有规律的。

  标题 摘要 作者  发布时间 推荐次数 评论条数 浏览次数 文章链接

  借助浏览器开发工具

  node.js抓取数据(fake小爬虫)

  发现 <div class="searchItem">...</div> 对应的是每篇文章

  点开每一项,有如下内容

  node.js抓取数据(fake小爬虫)

  class="searchItemTitle" 包含的是文章标题、也包含了文章URL地址

  class="searchItemInfo-userName" 包含的是作者

  class="searchItemInfo-publishDate" 包含的是发布时间

  class="searchItemInfo-views" 包含的是浏览次数

  借助 cheerio 模块解析文章,抓取具体的内容

var request = require('request');
var cheerio = require('cheerio');

var key = 'node.js', page = 1;
var url = 'http://zzk.cnblogs.com/s?t=b&w='+ key +'&p='+ page;

request(url, function(err, res) {
    if (err) return console.log(err);
    var $ = cheerio.load(res.body.toString());
    var arr = [];
    //内容解析
    $('.searchItem').each(function() {
        var title = $(this).find('.searchItemTitle');
        var author = $(this).find('.searchItemInfo-userName a');
        var time = $(this).find('.searchItemInfo-publishDate');
        var view = $(this).find('.searchItemInfo-views');
        var info = {
            title: $(title).find('a').text(),
            href: $(title).find('a').attr('href'),
            author: $(author).text(),
            time: $(time).text(),
            view: $(view).text().replace(/[^0-9]/ig, '')
        };
        arr.push(info);
        //打印
        console.log('============================= 输出开始 =============================');
        console.log(info);
        console.log('============================= 输出结束 =============================');
    });
});
View Code

相关文章: