百度爬虫这个词语,一般出现的都是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简单尝试的更多相关文章

  1. 基于Node.js的爬虫工具 – Node Crawler

    Node Crawler的目标是成为最好的node.js爬虫工具,目前已经停止维护. 我们来抓取光合新知博客tech栏目中的文章信息.访问http://dev.guanghe.tv/category/ ...

  2. 基于node.js制作爬虫教程

    前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...

  3. koa : Express出品的下一代基于Node.js的web框架

    https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...

  4. 转 10 个最佳的 Node.js 的 MVC 框架

    10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到:    收藏 +322 Node.js 是一个基于Chrome JavaScri ...

  5. Node.js的知识点框架整理

    背景:因为appium是基于Node.js的,所以想看一下Node.js.但是发现很多资料的顺序看起来有点颠倒.然后就一面看资料一面整理了一下大概的知识点框架,希望对自己对别人有用. 本文不包含nod ...

  6. 10 个最佳的 Node.js 的 MVC 框架

    补充:http://nokit.org/ https://thinkjs.org/zh-cn/doc/index.html Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...

  7. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  8. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  9. node.js Web应用框架Express.js(一)

    什么是Express.js Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随 ...

随机推荐

  1. 熟悉ifos项目的记录吧

    1.首页关联的:在 default-navigation-model.xml里 2.输入框改成下拉列框 第一步,找到需要修改的view的包,新建一个view obj 第二步,在query里写上需要找的 ...

  2. spring boot 源码之banner

    Banner 使用Spring Boot启动的jar包总是会显示一个Spring的图标.实际我们是可以自定义这个图标.Banner接口定义了打印banner的方法. void printBanner( ...

  3. use-default-filters的用法

    <context:component-scan base-package="com.atguigu.atcrowdfunding.*" > <context:ex ...

  4. 2020年的100天——FLAGS

    2020年的100天--FLAGS Reading <爱的博弈>-- 作者: 约翰·戈特曼 (John Gottman) / 娜恩·西尔弗 (Nan Silver) <人间失格> ...

  5. linux学习(四)Linux 文件基本属性

    一.引言 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限. 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Lin ...

  6. xss利用——BeEF#stage3(绕过同源策略与浏览器代理)

    绕过同源策略 正式进入攻击阶段.因为SOP(同源策略)的存在,BeEF只能对被勾子钩住的页面所在域进行操作.如果有办法绕过SOP,那么无疑会使攻击面放大. 绕过SOP可从两方面入手.第一个是从浏览器本 ...

  7. 1.UiPath账密安全保存常见方法

    今天在写流程的时候突然用到密码保存,看到同事不同项目中所用到的方法不同,就看了一下别的同学博客,总结的特别好,自己跟着实操了一遍,受益匪浅. RPA适合于登录不同的系统代替人工操作,而登录系统时难免要 ...

  8. day58:Linux:BashShell&linux文件管理&linux文件下载上传

    目录 1.BashShell 2.Linux文件管理 3.Linux文件下载和上传 BashShell 1.什么是BeshShell? 命令的解释,用来翻译用户输入的指令 2.BashShell能做什 ...

  9. 在 Kubernetes 上部署 OpenStack 是什么体验

    红蓝出 CP,OpenStack 和 Kubernetes 在一起会怎样? 背景 从去年开始就想深入地学习 Kubernetes,首先想到是在 OpenStack 上能比较轻松地玩转,所以去 尝试了 ...

  10. springboot项目整合rabbitMq涉及消息的发送确认,消息的消费确认机制,延时队列的实现

    1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...