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 相关文章推荐
jQuery 使用手册(六)
Sep 23 Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 Javascript
使用jQuery实现返回顶部
Jan 26 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
作为老司机使用 React 总结的 11 个经验教训
Apr 08 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
javascript数组的定义及操作实例
Nov 10 Javascript
react 生命周期实例分析
May 18 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 Javascript
js+canvas实现画板功能
Sep 13 Javascript
keep-alive保持组件状态的方法
Dec 02 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
python 日期操作类代码
2018/05/05 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
解决方案设计综合面试题
2015/08/31 面试题
青年教师典范事迹材料
2014/01/31 职场文书
爱我中华演讲稿
2014/05/20 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
索尼ICF-5900W收音机测评
2022/04/24 无线电