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 相关文章推荐
关于setInterval、setTimeout在jQuery中的使用注意事项
Sep 28 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JS事件添加和移出的兼容写法示例
Jun 20 Javascript
微信小程序中显示html格式内容的方法
Apr 25 Javascript
vue-loader教程介绍
Jun 14 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
vue 解决provide和inject响应的问题
Nov 12 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php addslashes 函数详细分析说明
2009/06/23 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php中的静态变量的基本用法
2014/03/20 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Django安装配置mysql的方法步骤
2018/10/15 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
竞争上岗演讲稿
2014/01/05 职场文书
高级工程师英文求职信
2014/03/19 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书