在重構(gòu)代碼之前,先要了解下什么是https?
按需求定制網(wǎng)站可以根據(jù)自己的需求進(jìn)行定制,網(wǎng)站設(shè)計、成都做網(wǎng)站構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司網(wǎng)站設(shè)計、成都做網(wǎng)站的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義
https協(xié)議:基于ssl/tls的http協(xié)議,所有的數(shù)據(jù)都是在
ssl/tls協(xié)議的封裝之上傳輸?shù)?,也就是說https協(xié)議是在http協(xié)議基礎(chǔ)上
添加了ssl/tls握手以及數(shù)據(jù)加密傳輸,因此這就是兩者之間最大的區(qū)別。
https模塊專門處理加密訪問的,區(qū)別在于搭建https服務(wù)器的時候需要有ssl證書。
模擬搭建https服務(wù)器
var https = require('https') var fs = require('fs')//文件系統(tǒng)模塊 var options = { //同步的讀出ssl證書__虛擬 key:fs.readFileSync('ssh_key.pem') cert:fs.readFileSync('ssh_cert.pem') } //通過以上讀取證書之后就可以運(yùn)行https服務(wù)器 https.createServer(options, function(req,res){ res.wirteHead(200) res.end('Hello Https') }).listen(8090)
重構(gòu)爬蟲代碼:
var http = require('http') var cheerio = require('cheerio') //在新版本中Promise已經(jīng)內(nèi)置 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') //標(biāo)題 var title = $('#main .path span').text() //學(xué)習(xí)的人數(shù) //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:[] } //遍歷的里面拿到數(shù)據(jù) chapters.each(function(item){ var chapter = $(this); //章節(jié)標(biāo)題 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 + ' 人學(xué)過 '+courseData.title+'\n') }) //數(shù)組中的遍歷 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){ //遍歷的結(jié)果傳遞過去 fetchCourseArray.push(getPageAsync(baseUrl + id)) }) //需要做并發(fā)控制,全部去爬 Promise .all(fetchCourseArray) .then(function(pages){ //多頁面處理 var coursesData = [] //對page進(jìn)行加工 pages.forEach(function(html){ //對html進(jìn)行解析 var courses = filterChapters(html) coursesData.push(courses) }) //遍歷 coursesData.sort(function(a,b){ return a.number < b.number }) printCourseInfo(coursesData) })
運(yùn)行結(jié)果如下:
分享標(biāo)題:Node.js(十三)——Promise重構(gòu)爬蟲代碼
URL分享:http://jinyejixie.com/article48/pggehp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站設(shè)計、云服務(wù)器、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)