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 相关文章推荐
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
跟我学习javascript的循环
Nov 18 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
jQuery3.0中的buildFragment私有函数详解
Aug 16 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
js实现放大镜特效
May 18 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
在angularJs中进行数据遍历的2种方法
Oct 08 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
vue 自动化路由实现代码
Sep 03 Javascript
vue按需加载实例详解
Sep 06 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
php生成静态页面的简单示例
2014/04/17 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
浅析Python中return和finally共同挖的坑
2017/08/18 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
linux面试题参考答案(4)
2014/09/21 面试题
高校生生产实习自我鉴定
2013/09/21 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
开发房地产协议书
2014/09/14 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android