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 相关文章推荐
屏蔽Flash右键信息的js代码
Jan 17 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
深入解析JavaScript编程中的this关键字使用
Nov 09 Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
教你如何用node连接redis的示例代码
Jul 12 Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 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和XSS跨站攻击的防范
2007/04/17 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
理解JavaScript原型链
2016/10/25 Javascript
微信小程序入门教程
2016/11/18 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Python中return self的用法详解
2018/07/27 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
基于python3的socket聊天编程
2020/02/17 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
电子商务网站的创业计划书
2014/01/05 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
学生手册家长评语
2014/02/10 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
python中的None与NULL用法说明
2021/05/25 Python
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python