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)
Oct 31 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
js实现日期级联效果
Jan 23 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
Angular2 之 路由与导航详细介绍
May 26 Javascript
详解A标签中href=""的几种用法
Aug 20 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
小程序自定义组件实现城市选择功能
Jul 18 Javascript
vue请求数据的三种方式
Mar 04 Javascript
vue实现前端分页完整代码
Jun 17 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/02/05 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
php5与php7的区别点总结
2019/10/11 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
详解vue中axios的封装
2018/07/18 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
详解Python中的多线程编程
2015/04/09 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
软件工程师岗位职责
2013/11/16 职场文书
食堂个人先进事迹
2014/01/22 职场文书
协议书怎么写
2014/04/21 职场文书
科技之星事迹材料
2014/06/02 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
支部书记四风对照材料
2014/08/28 职场文书
安全教育主题班会教案
2015/08/12 职场文书
社区服务理念口号
2015/12/25 职场文书
Python如何配置环境变量详解
2021/05/18 Python
vue3获取当前路由地址
2022/02/18 Vue.js