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

Stella981
• 阅读 444

关注“重度前端”

助力前端深度学习

━━━━━

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


前言

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

获取电影下载连接

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

常规先来分析页面布局

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

我们如果想要准确定位到下载链接,需要先找到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

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

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

就这样我们将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

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

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

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

总结:

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

关于本文


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


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

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

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

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

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

长按二维码关注我

本文分享自微信公众号 - 前端技术江湖(bigerfe)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Stella981 Stella981
3年前
Node.js 12中的ES模块[每日前端夜话0x9E]
每日前端夜话0x9E每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:2552字预计阅读时间:10 分钟作者:BrianDeSousa翻译:疯狂的技术宅来源:logrocket!(https://oscimg.oschina.net/oscnet/2ccaf94cecd3
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
可莉 可莉
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Wesley13 Wesley13
3年前
CSS 奇思妙想:超级酷炫的边框动画
点上方蓝字关注公众号「前端从进阶到入院」精选原创好文助你进入大厂文章转载自公众号「iCSS前端趣闻」今天逛博客网站shoptalkshow\1\,看到这样一个界面,非常有意思:!(https://oscimg.oschina.net/oscnet/9655b35af5a045999ff55c144a3f7c
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这