Node.js实现简易爬虫(2)

关注“重度前端”

助力前端深度学习

━━━━━

640?wx_fmt=png


前言

咱们继续上一篇继续将这个小爬虫的功能再完善一下。

获取电影下载连接

如果是人工操作,我们需要一次操作,通过点击进入电影详情页才能找到下载地址

常规先来分析页面布局

640?wx_fmt=png

我们如果想要准确定位到下载链接,需要先找到idZoom的div,下载链接就在这个div下的tr下的a标签内。

那我们就再定义一个函数,用于获取下载链接

getBtLink()

function getBtLink(urls, n) { //urls里面包含着所有详情页的地址
  console.log("正在获取第" + n + "个url的内容");
  http.get('http://www.ygdy8.net' + urls[n].title, function(sres) {
    var chunks = [];
    sres.on('data', function(chunk) {
      chunks.push(chunk);
    });
    sres.on('end', function() {
      var html = iconv.decode(Buffer.concat(chunks), 'gb2312'); //进行转码
      var $ = cheerio.load(html, {decodeEntities: false});
      $('#Zoom td').children('a').each(function (idx, element) {
        var $element = $(element);
        btLink.push({
          bt: $element.attr('href')
        })
      })
      if(n < urls.length - 1) {
        getBtLink(urls, ++count); //递归
      } else {
        console.log("btlink获取完毕!");
        console.log(btLink);   
      }
    });
  });
}

再次运行 node index

640?wx_fmt=png

640?wx_fmt=png

就这样我们将3个页面内所有电影的下载链接获取完毕,是不是很简单?

保存数据

我们讲这些数据爬取出来当然是要进行保存的啊,在这里我选用了MongoDB来对其进行保存处理

数据保存函数 save()

function save() {
  var MongoClient = require('mongodb').MongoClient; //导入依赖
  MongoClient.connect(mongo_url, function (err, db) {
    if (err) {
      console.error(err);
      return;
    } else {
      console.log("成功连接数据库");
      var collection = db.collection('node-reptitle');
      collection.insertMany(btLink, function (err,result) { //插入数据
        if (err) {
          console.error(err);
        } else {
          console.log("保存数据成功");
        }
      })
      db.close();
    }
  });
}

这里的操作很简单,就没必要上mongoose啦再次运行 node index

640?wx_fmt=png

这个Node.js实现的爬虫就是这样了,祝大家能爬到自己想要的数据;)

源码地址:https://github.com/HuangXiZhou/node-reptitle

总结:

本文这个小爬虫用了两篇文章咱们讲完了,从技术上来说还是比较基础的,不过技术这东西都是举一反三的。我们可以思考下爬虫的原理是什么?我能想到的是通过http请求把网页的数据拿到,然后对文档内容进行解析,用了jq的操作习惯。当然如果我们自己写也是可以写的,只是开发体验没这么高级,当然我们也可以实现他的操作方式,只是这个库帮我们处理完了。

关于本文


原文地址:
https://segmentfault.com/a/1190000008745531

都说前端fe不是帅哥就是美女,我说对了【点个赞吧-右下角】

640?wx_fmt=png

 重度前端--助力深度学习

为web前端同行提供有价值、有深度的技术文章

官网:http://bigerfe.com【建设中】

640?wx_fmt=jpeg

长按二维码关注我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值