Node.js(十三)——Promise重构爬虫代码-创新互联
在重构代码之前,先要了解下什么是https?
成都创新互联是专业的阳西网站建设公司,阳西接单;提供网站设计、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行阳西网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!https协议:基于ssl/tls的http协议,所有的数据都是在
ssl/tls协议的封装之上传输的,也就是说https协议是在http协议基础上
添加了ssl/tls握手以及数据加密传输,因此这就是两者之间大的区别。
https模块专门处理加密访问的,区别在于搭建https服务器的时候需要有ssl证书。
模拟搭建https服务器
var https = require('https') var fs = require('fs')//文件系统模块 var options = { //同步的读出ssl证书__虚拟 key:fs.readFileSync('ssh_key.pem') cert:fs.readFileSync('ssh_cert.pem') } //通过以上读取证书之后就可以运行https服务器 https.createServer(options, function(req,res){ res.wirteHead(200) res.end('Hello Https') }).listen(8090)
重构爬虫代码:
var http = require('http') var cheerio = require('cheerio') //在新版本中Promise已经内置 var promise = require('bluebird') var baseUrl = 'http://www.imooc.com/learn/' var videoIds = [348,259,197,134,751] function filterChapters(html){ var $ = cheerio.load(html) var chapters = $('.mod-chapters') //标题 var title = $('#main .path span').text() //学习的人数 //var number = parseInt($($('static-item')[0]).text().trim(),10) //var number = $($('.static-item span')[1]).text(); //var number = parseInt($('.meta-value js-learn-num').text().trim(),10) var number = $('.meta-value js-learn-num').html() var courseData = { title:title, number:number, videos:[] } //遍历的里面拿到数据 chapters.each(function(item){ var chapter = $(this); //章节标题 var chapterTitle = chapter.find('strong').text() console.log(chapterTitle) var videos = chapter.find('.video').children('li') var chapterData = { chapterTitle:chapterTitle, videos:[] } //遍历videos videos.each(function(item){ var video = $(this).find('.J-media-item') var videoTitle = video.text() var id = video.attr('href').split('video/')[1] chapterData.videos.push({ title:videoTitle, id:id }) }) courseData.videos.push(chapterData) }) return courseData } function printCourseInfo(coursesData){ coursesData.forEach(function(courseData){ console.log(courseData.number + ' 人学过 '+courseData.title+'\n') }) //数组中的遍历 coursesData.forEach(function(courseData){ console.log('### '+courseData.title+'\n') courseData.videos.forEach(function(item){ var chapterTitle = item.chapterTitle item.videos.forEach(function(video){ console.log('【'+video.id+'】'+video.title); }) }) }) } function getPageAsync(url){ return new Promise(function(resolve,reject){ console.log('正在抓取' + url ) http.get(url, function(res){ var html = '' res.on('data',function(data){ html += data }) res.on('end',function(){ //在请求完成的时候,通过resolve传递下去 resolve(html) }).on('error',function(e){ //如果出错了 reject(e) console.log('获取页面出错') }) }) }) } var fetchCourseArray = [] videoIds.forEach(function(id){ //遍历的结果传递过去 fetchCourseArray.push(getPageAsync(baseUrl + id)) }) //需要做并发控制,全部去爬 Promise .all(fetchCourseArray) .then(function(pages){ //多页面处理 var coursesData = [] //对page进行加工 pages.forEach(function(html){ //对html进行解析 var courses = filterChapters(html) coursesData.push(courses) }) //遍历 coursesData.sort(function(a,b){ return a.number < b.number }) printCourseInfo(coursesData) })
运行结果如下:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:Node.js(十三)——Promise重构爬虫代码-创新互联
标题URL:http://scgulin.cn/article/hppjd.html