node-crawler

安装与使用

安装

$ yarn add crawler

创建爬虫实例

var Crawler = require("crawler");
var c = new Crawler({
  // 在每个请求处理完毕后将调用此回调函数
  callback : function (error, res, done) {
    if(error){
      console.log(error);
    }else{
      var $ = res.$;
      // $ 默认为 Cheerio 解析器
      // 它是核心jQuery的精简实现,可以按照jQuery选择器语法快速提取DOM元素
      console.log($("title").text());
    }
    done();
  }
});

抓取单个页面

// 将一个URL加入请求队列,并使用默认回调函数
c.queue('http://www.baidu.com');

控制台输出:百度一下,你就知道

抓取多个页面

// 将多个URL加入请求队列
c.queue(['https://www.xiaoyulive.top', 'https://www.taobao.com']);

控制台输出:

  • 小昱个人网站 | 昱之家
  • 淘宝网 - 淘!我喜欢

针对单个页面作特定处理

// 对单个URL使用特定的处理参数并指定单独的回调函数
c.queue([{
  uri: 'https://github.com',
  jQuery: false,
  // 全局callback将不被执行
  callback: function (error, res, done) {
    if(error){
      console.log(error);
    }else{
      console.log('Grabbed', res.body.length, 'bytes');
    }
    done();
  }
}]);

控制台输出:Grabbed 86861 bytes

抓取一段HTML

// 将一段HTML代码加入请求队列,即不通过抓取,直接交由回调函数处理(可用于单元测试)
c.queue([{
  html: `
    <title>Hello world!</title>
    <p>This is a <strong>test</strong></p>
  `
}]);

控制台输出:Hello world!

带参抓取

var Crawler = require("crawler");
var c = new Crawler({
  callback : function (error, res, done) {
    if(error){
      console.log(error);
    }else{
      var $ = res.$;
      console.log($("title").text());
      // 获取输入的自定义参数并打印。
      console.log(res.options.q);
    }
    done();
  }
});
c.queue({
  uri:"https://github.com/search",
  q:"node",
});

以上,实际上抓取的是 https://github.com/search?q=node,在 callback 中使用 res.options.q 获取到参数

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress