node.js爬虫框架node-crawler初体验


Posted in Javascript onOctober 29, 2020

百度爬虫这个词语,一般出现的都是python相关的资料。

py也有很多爬虫框架,比如scrapy,Portia,Crawley等。

之前我个人更喜欢用C#做爬虫。

随着对nodejs的熟悉。发现做这种事情还是用脚本语言适合多了,至少不用写那么多的实体类。而且脚本一般使用比较简单。

在github上搜索node+spider,排名第一的就是node-crawler 

github:https://github.com/bda-research/node-crawler

简单使用

npm 安装:

npm install crawler

new一个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();
 }
});

然后往crawler队列里面不停的加url就行了,

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

// 将多个URL加入请求队列
c.queue(['http://www.google.com/','http://www.yahoo.com']);

控制并发速度

爬虫框架一般都是同时去爬多个页面,但是速度过快会触发目标网站的反爬虫机制,也同时影响别人网站的性能。

控制最大的并发数量

var c = new Crawler({
 // 最大并发数默认为10
 maxConnections : 1,

 callback : function (error, res, done) {
  if(error){
   console.log(error);
  }else{
   var $ = res.$;
   console.log($("title").text());
  }
  done();
 }
});

使用慢速模式

使用参数 rateLimit 启用慢速模式,两次请求之间会闲置 rateLimit 毫秒,而 maxConnections 将被强行修改为 1 。

var c = new Crawler({
 // `maxConnections` 将被强制修改为 1
 maxConnections : 10,

 // 两次请求之间将闲置1000ms
 rateLimit: 1000,

 callback : function (error, res, done) {
  if(error){
   console.log(error);
  }else{
   var $ = res.$;
   console.log($("title").text());
  }
  done();
 }
});

下载图片等静态文件

var c = new Crawler({
 encoding:null,
 jQuery:false,// set false to suppress warning message.
 callback:function(err, res, done){
  if(err){
   console.error(err.stack);
  }else{
   fs.createWriteStream(res.options.filename).write(res.body);
  }
  
  done();
 }
});

c.queue({
 uri:"https://nodejs.org/static/images/logos/nodejs-1920x1200.png",
 filename:"nodejs-1920x1200.png"
});

以上就是node.js爬虫框架node-crawler初体验的详细内容,更多关于爬虫框架node-crawler的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
Sep 25 Javascript
EasyUI在表单提交之前进行验证的实例代码
Jun 24 Javascript
webpack常用配置项配置文件介绍
Nov 07 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
vue 2.x 中axios 封装的get 和post方法
Feb 28 Javascript
JS数组Object.keys()方法的使用示例
Jun 05 Javascript
在js文件中引入(调用)另一个js文件的三种方法
Sep 11 Javascript
JavaScript实现一键复制内容剪贴板
Jul 23 Javascript
JavaScript实现网页计算器功能
Oct 29 #Javascript
Javascript数组及类数组相关原理详解
Oct 29 #Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 #Javascript
node.js如何操作MySQL数据库
Oct 29 #Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 #Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 #Javascript
vue 函数调用加括号与不加括号的区别
Oct 29 #Javascript
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
PHP初学入门
2006/11/19 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
解读python如何实现决策树算法
2018/10/11 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
QML用PathView实现轮播图
2020/06/03 Python
本科毕业生自我鉴定
2013/11/02 职场文书
关于爱情的广播稿
2014/01/16 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
工程质量承诺书范文
2014/03/27 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
2014年库房工作总结
2014/11/26 职场文书
五年级学生期末评语
2014/12/26 职场文书
新闻通讯稿模板
2015/07/22 职场文书
团组织关系介绍信
2019/06/24 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Golang map映射的用法
2022/04/22 Golang
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers