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 相关文章推荐
JS中style属性
Oct 11 Javascript
JavaScript 数组循环引起的思考
Jan 01 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
Jan 12 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
JavaScript中获取样式的原生方法小结
Oct 08 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
Nov 06 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
node+koa实现数据mock接口的方法
Sep 20 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
Nov 22 Javascript
解决vue2中使用axios http请求出现的问题
Mar 05 Javascript
Nuxt.js 静态资源和打包的操作
Nov 06 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
第二节 对象模型 [2]
2006/10/09 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
js同时按下两个方向键
2007/12/01 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
js获取ip和地区
2017/03/10 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
python爬虫 requests-html的使用
2020/11/30 Python
几个数据库方面的面试题
2016/07/01 面试题
计算机网络及管理学专业求职信
2014/06/05 职场文书
大专学生求职自荐信
2014/07/06 职场文书
商场消防安全责任书
2014/07/29 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP