node.js的强大就无需再去重复了,愈来愈多的公司在使用node.js,还有一点不得不提的优点就是node用的是javascript的语言,对于前端开发工程师来讲,没有理由不去get这一强大的技能。如今本人也是在学习阶段,结合本身作的一些demo进行总结。今天给你们分享一下用node.js实现一个简易的爬虫,但愿能和你们一块儿交流探讨。javascript
当在浏览器中访问'http://localhost:3000'的时候,能够以json的形式输出慕课网首页的 部分热门课程(本人偶尔会去慕课网上看一些学习的视频)html
步骤前端
1.新建一个文件夹,进去以后'npm init'(这个命令的做用就是帮咱们互动式地生成一份 最简单的 package.json 文件,init
是 initialize
的意思,初始化。 )当一路回车而且填写信息完毕后会出现一个package.json文件(首先须要在电脑上安装node.js)。java
2.安装相应的依赖,在此例子中,须要用到的有cheerio,express,superagent。其中 express 是 Node.js 应用最普遍的 web 框架,建议你们有时间能够多去官网看看其API,因此如今开始安装依赖,经过命令cnpm i cheerio express superagent -S完成依赖的安装。安装完成后效果以下图:node
3.如今在文件夹里建一个js文件,好比取名为index.js,接下来就是在里面写代码,话很少说,直接上代码,在代码中也作了较为详细的注释。jquery
//引入模块 var express = require('express'); var cheerio = require('cheerio'); var superagent = require('superagent'); // 调用 express 实例,它是一个函数,不带参数调用时,会返回一个 express 实例,将这个变量赋予 app 变量。 var app = express(); // app 自己有不少方法,其中包括最经常使用的 get、post、put/patch、delete,在这里咱们调用其中的 get 方法,为咱们的 `/` 路径指定一个 handler 函数。 // 这个 handler 函数会接收 req 和 res 两个对象,他们分别是请求的 request 和 response。 // request 中包含了浏览器传来的各类信息,好比 query 啊,body 啊,headers 啊之类的,均可以经过 req 对象访问到。 // res 对象,咱们通常不从里面取信息,而是经过它来定制咱们向浏览器输出的信息,好比 header 信息,好比想要向浏览器输出的内容。 //这里咱们调用了它的 #send 方法,向浏览器输出一个字符串。 app.get('/', function (req, res, next) { superagent.get('https://www.imooc.com/') .end(function (err, sres) { if (err) { return next(err); } // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 以后 // 就能够获得一个实现了 jquery 接口的变量,咱们习惯性地将它命名为 `$` // 剩下就都是 jquery 的内容了 var $ = cheerio.load(sres.text); var items = []; $('.banner-course-card .clearfix').each(function (idx, element) { var $element = $(element); items.push({ title: $element.attr('title'), href: $element.attr('href') }); }); res.send(items); // 定义好咱们 app 的行为以后,让它监听本地的 3000 端口。这里的第二个函数是个回调函数, //会在 listen 动做成功后执行,咱们这里执行了一个命令行输出操做,告诉咱们监听动做已完成。 }); }); app.listen(3000, function () { console.log('app is listening at port 3000'); }); 复制代码
经过请求获得网页的html内容并储存于sres.text中,再传给cheerio.load,获得一个实现jquery接口的变量,而后就相似于jquery选择器的方法对页面的元素的查找,拿到本身想要的数据便可。在定义好行为以后,让它监听本地的 3000 端口。这里的第二个函数是个回调函数,会在 listen 动做成功后执行,咱们这里执行了一个命令行输出操做,告诉咱们监听动做已完成。web
输入命令 ' node index.js ' , 会看到打印出'app is listening at port 3000 ',如图所示: express
打开浏览器,访问'http://localhost:3000/',就能够看到咱们爬虫得来的数据哦,以下图所示:npm
只是用了最基本的node实现了一个简易的爬虫效果,固然在这个例子中并无利用到node.js的异步并发特性,待深刻研究再作分享,但愿和你们多多交流探讨。json