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 开发者应该注意的9个错误
May 03 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
一个js过滤空格的小函数
Oct 10 Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 Javascript
JS & JQuery 动态添加 select option
Jun 08 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
Dec 24 Javascript
解决vue无法设置滚动位置的问题
Oct 07 Javascript
你可能不知道的CORS跨域资源共享
Mar 13 Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 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
PHP日期处理函数 整型日期格式
2011/01/12 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
动态加载js的几种方法
2006/10/23 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python实现分页效果
2017/10/25 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python学生信息管理系统
2018/03/13 Python
Python实现的端口扫描功能示例
2018/04/08 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
PyQt5实现简易电子词典
2019/06/25 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
浅谈Python3中print函数的换行
2020/08/05 Python
2014端午节活动策划方案
2014/01/27 职场文书
九年级英语教学反思
2014/01/31 职场文书
公共场所标语
2014/06/30 职场文书
网络销售员岗位职责
2015/04/11 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
python简单验证码识别的实现过程
2021/06/20 Python
MySQL窗口函数的具体使用
2021/11/17 MySQL