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 相关文章推荐
两个select之间option的互相添加操作(jquery实现)
Nov 12 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
一分钟理解js闭包
May 04 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
使用JavaScript获取URL中的参数(两种方法)
Nov 16 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
详解Angular CLI + Electron 开发环境搭建
Jul 20 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 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 操作调试的方法
2012/07/12 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
python实现图片批量剪切示例
2014/03/25 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
分公司任命书
2014/06/06 职场文书
机械专业技术员求职信
2014/06/14 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis
5道关于python基础 while循环练习题
2021/11/27 Python