亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

代碼可以正常爬取,但是界面上標題后面總是有這一章的介紹,還有每一節數字后面的“開始學習”不知道在哪里,也去不掉。

var?http?=?require('http');
var?cheerio?=?require('cheerio');
//?var?Promise?=?window.Promise;		//WINDOW?is?not?defined
//?var?Promise?=?require('Promise');		//can?not?find?module?"Promise"
var?Promise?=?require('bluebird');
var?url?=?'http://www.xianlaiwan.cn/learn/';
var?courseId?=[56,?38,?637,?348,?259,?197,?134,?75];

function?filterChapters(html){
	var?$?=?cheerio.load(html);
/*
//數組
[{
	chapterTitle:'',
	videos:[
			title:'',
			id:''
		]
}]*/

/*
//對象
courseData?=?{
	title:title,
	number:number,
	videos:[{
		chapterTitle:title,
		videos:[
				title:'',
				id:''
			]
	}]
}*/
	var?chapters?=?$('.chapter');
	var?title?=?$('#main?.hd?h2').text();
	var?number?=?$('#main?.static-item?span.js-learn-num').text();
	var?courseData?=?{
		title:title,
		number:number,
		videos?:?[]
	};

	chapters.each(function(){
		var?chapterTitle?=?$(this).find('strong').not('strong?div').text().trim();		//如何去掉
		var?videos?=?$(this).find('ul').children('li');

		var?chapterData?=?{
			chapterTitle:?chapterTitle,
			videos:[]
		}

		videos.each(function(){		//item?used?as?this
			var?videoTitle?=?$(this).find('a').text().trim();
			var?videoId?=?$(this).attr('data-media-id');
			chapterData.videos.push({
				title:videoTitle,
				id:videoId
			})
		});

		//?courseData.push(chapterData);		//courseData是對象,沒有push方法
		courseData.videos.push(chapterData);
	});
	return?courseData;	
}

function?printCourseInfo(coursesData){
	coursesData.forEach(function(courseData){
		console.log(courseData.number?+?'?人學過?'?+?courseData.title?+?'\n');

		var?str?=?'';
		courseData.videos.forEach(function(item){
			str?+=?item.chapterTitle?+'\n';
			item.videos.forEach(function(item){
				str?+=?'【'+item.id+'】'+?item.title?+'\n'
			})
		})
		console.log(str);
	})
	
}



function?getPageSync(url){
	return?new?Promise(function(resolve,?reject){				//er1:promise是對象
		console.log('正在爬取'?+?url);
		http.get(url,function(res){
			var?html?=?'';

			res.on('data',function(data){
				html?+=?data;
			})

			res.on('end',function(){
				resolve(html);		//成功后返回傳遞html

				//?var?courseData?=?filterChapters(html);
			})
		}).on('error',function(e){
			reject(e);
			console.log('獲取課程數據失敗');
		})
	})
}

var?fetchCourseArray?=?[];		//Promise對象的數組

courseId.forEach(function(id){
	fetchCourseArray.push(getPageSync(?url?+?id));		//組合地址
})

Promise
		.all(fetchCourseArray)		//接收一個數組,數組里面是一個一個Promise
		.then(function(pages){		//pages拿到傳遞下來的結果

			var?coursesData?=?[];

			pages.forEach(function(html){
				var?courses?=?filterChapters(html);

				coursesData.push(courses);
			})

			coursesData.sort(function(a,b){		//返回正數,則a應該位于b后面
				return?a.number?<?b.number;		//由大到小的順序
			})

			printCourseInfo(coursesData);

		})


正在回答

舉報

0/150
提交
取消
進擊Node.js基礎(二)
  • 參與學習       76735    人
  • 解答問題       242    個

本教程帶你攻破 Nodejs,讓 JavaScript流暢運行在服務器端

進入課程

代碼可以正常爬取,但是界面上標題后面總是有這一章的介紹,還有每一節數字后面的“開始學習”不知道在哪里,也去不掉。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號