关注“重度前端”
助力前端深度学习
━━━━━
前言
咱们继续上一篇继续将这个小爬虫的功能再完善一下。
获取电影下载连接
如果是人工操作,我们需要一次操作,通过点击进入电影详情页才能找到下载地址
那我们通过node如何来实现呢
常规先来分析页面布局
我们如果想要准确定位到下载链接,需要先找到id
为Zoom
的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
就这样我们将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实现的爬虫就是这样了,祝大家能爬到自己想要的数据;)
源码地址:https://github.com/HuangXiZhou/node-reptitle
总结:
本文这个小爬虫用了两篇文章咱们讲完了,从技术上来说还是比较基础的,不过技术这东西都是举一反三的。我们可以思考下爬虫的原理是什么?我能想到的是通过http请求把网页的数据拿到,然后对文档内容进行解析,用了jq的操作习惯。当然如果我们自己写也是可以写的,只是开发体验没这么高级,当然我们也可以实现他的操作方式,只是这个库帮我们处理完了。
关于本文
原文地址:
https://segmentfault.com/a/1190000008745531
都说前端fe不是帅哥就是美女,我说对了【点个赞吧-右下角】
重度前端****--助力深度学习
为web前端同行提供有价值、有深度的技术文章
长按二维码关注我
本文分享自微信公众号 - 前端技术江湖(bigerfe)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。