运用node实现简单爬虫

node.js的强大就无需再去重复了,愈来愈多的公司在使用node.js,还有一点不得不提的优点就是node用的是javascript的语言,对于前端开发工程师来讲,没有理由不去get这一强大的技能。如今本人也是在学习阶段,结合本身作的一些demo进行总结。今天给你们分享一下用node.js实现一个简易的爬虫,但愿能和你们一块儿交流探讨。javascript

目标:

当在浏览器中访问'http://localhost:3000'的时候,能够以json的形式输出慕课网首页的 部分热门课程(本人偶尔会去慕课网上看一些学习的视频)html

步骤前端

1.新建一个文件夹,进去以后'npm init'(这个命令的做用就是帮咱们互动式地生成一份 最简单的 package.json 文件,initinitialize 的意思,初始化。 )当一路回车而且填写信息完毕后会出现一个package.json文件(首先须要在电脑上安装node.js)。java

2.安装相应的依赖,在此例子中,须要用到的有cheerio,express,superagent。其中 express 是 Node.js 应用最普遍的 web 框架,建议你们有时间能够多去官网看看其API,因此如今开始安装依赖,经过命令cnpm i cheerio express superagent -S完成依赖的安装。安装完成后效果以下图:node

此时就完成了依赖的安装,在package.json中的dependencies目录下会有刚刚安装的三个依赖

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

相关文章
相关标签/搜索