成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Node.js(十三)——Promise重構(gòu)爬蟲代碼

在重構(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é)果如下:

Node.js(十三)——Promise重構(gòu)爬蟲代碼

分享標(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)

成都網(wǎng)站建設(shè)
常宁市| 昌江| 呈贡县| 海阳市| 宁陵县| 长海县| 股票| 新蔡县| 巨鹿县| 凤凰县| 双城市| 荆门市| 安西县| 玉山县| 威信县| 五台县| 杨浦区| 利辛县| 于都县| 永修县| 利辛县| 双辽市| 临安市| 襄垣县| 中超| 花莲市| 宣武区| 突泉县| 镇巴县| 新邵县| 康保县| 囊谦县| 安仁县| 万安县| 喀喇| 浦北县| 溧阳市| 江川县| 临清市| 高陵县| 湖州市|