第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

可運(yùn)行代碼(交流學(xué)習(xí))

var?http?=?require('http');
var?Promise?=?require('bluebird');
var?cheerio?=?require('cheerio');
var?colors?=?require('colors');
var?baseUrl?=?'http://idcbgp.cn/learn/';
var?videoIds?=?[348,?259,?197,?134,?75];
var?url?=?'http://idcbgp.cn/learn/348';

console.log('正在啟動(dòng)程序');
console.log('.')
console.log('..')
console.log('.........')

function?removeSpecialCharscter(words)?{
??var?reg?=?/\s+/g;
??return?words.replace(reg,?'?');
}

function?filterHtml(obj)?{
??var?$?=?cheerio.load(obj.html);
??var?courseId?=?obj.id;
??var?courseTitle?=?$('#main?.course-infos?h2').text().trim();
??var?chapters?=?$('.chapter');
???/*[
???chapterTitle:?'',
???sessions:{
??????chapterTitle:?'',
??????session:?[{
????????id:?'',
????????title:?''
??????}]
??}]*/?
??var?courseData?=?[];
??
??//獲取章
??chapters.each(function(item)?{
????var?chapter?=?$(this);
????var?$chapterTitle?=?chapter.find('strong').clone();
????$chapterTitle.find('.chapter-info').remove();
????//章標(biāo)題
????var?chapterTitle?=?$chapterTitle.text();
????chapterTitle?=?removeSpecialCharscter(chapterTitle.trim());

????var?chapterData?=?{
??????chapterTitle:?chapterTitle,
??????sessions:?[]
????};???

????//獲取節(jié)
????var?sessions?=?chapter.find('.video?li');
????sessions.each(function(item)?{
??????var?session?=?$(this);
??????var?$a?=?session.find('a');
??????var?sessionTitle?=?removeSpecialCharscter($a.text().trim());
??????var?splitSessionTitle?=?sessionTitle.split('(');
??????sessionTitle?=?splitSessionTitle[0];
??????var?id?=?$a.attr('href').split('/video/')[1];
??????chapterData.sessions.push({
????????id:?id,
????????title:?sessionTitle
??????});
????})

????courseData.push(chapterData);
??});
??courseData?=?{
????id:?courseId,
????title:?courseTitle,
????chapterData:?courseData
??};
??return?courseData;
}

function?printCourseInfo(courseData)?{
??var?courseId?=?courseData.id;
??var?courseTitle?=?courseData.title;
??console.log(('\n《'?+?courseTitle?+?'》?編號(hào):'?+?courseId).green);

??var?courses?=?courseData['chapterData'];

??courses.forEach(function(item)?{
????var?chapterTitle?=?item.chapterTitle;
????//輸出章
????console.log(chapterTitle.red);
????var?sessions?=?item.sessions;
????//輸出節(jié)
????sessions.forEach(function(item)?{
??????console.log('??'?+?item.title.yellow);
????})

??});
}

function?getPageAsync(url,?id)?{
??return?new?Promise(function(resolve,?reject)?{
????http.get(url,?function(res)?{
??????console.log('正在爬取:'+url)
??????var?html?=?'';

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

??????res.on('end',?function()?{
????????resolve({
??????????html:?html,
??????????id:?id
????????});
????????/*var?courseData?=?filterHtml(html);
????????pringCourseInfo(courseData);*/
??????})
????}).on('error',?function(e)?{
??????reject(e)
??????console.log('獲取網(wǎng)頁(yè)代碼出錯(cuò)!');
????})

??})
}

var?fetchCourseArray?=?[];

videoIds.forEach(function(id)?{
??fetchCourseArray.push(getPageAsync(baseUrl?+?id,?id))
})

Promise
??.all(fetchCourseArray)
??.then(function(obj)?{
????setTimeout(function()?{
??????var?courseData?=?[];

??????obj.forEach(function(item)?{
????????var?course?=?filterHtml(item);
????????courseData.push(course);
??????})

??????courseData.sort(function(a,?b)?{
????????return?a.id?>?b.id;
??????})
??????.forEach(function(course)?{
????????printCourseInfo(course);
??????})

??????//?console.log('成功爬取頁(yè)面!');
????},?1000)
??})


正在回答

4 回答

沒(méi)人人數(shù)獲取嗎?他們說(shuō)ajax可行,我在代碼中實(shí)例化xhr對(duì)象,結(jié)果構(gòu)造器不存在,想來(lái)是node環(huán)境下沒(méi)有這個(gè),然后直接獲取人數(shù)又是一個(gè)空值,腦闊疼!

0 回復(fù) 有任何疑惑可以回復(fù)我~

? ?courseData.push(chapterData);

??});

??courseData?=?{

????id:?courseId,

????title:?courseTitle,

????chapterData:?courseData

??};

??return?courseData;

。。。你就不能規(guī)范點(diǎn)命名么~ = =!


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

炸豬排超人 提問(wèn)者

駝峰式命名,并沒(méi)有什么錯(cuò)哦~
2017-11-28 回復(fù) 有任何疑惑可以回復(fù)我~

很棒哦??!但是為什么要設(shè)個(gè)定時(shí)器

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

weibo_流浪的two子_0

http.get 也是異步的,所以很有可能當(dāng)promise執(zhí)行的時(shí)候,fetchCourseArray還是一個(gè)空數(shù)組呢吧。
2017-10-24 回復(fù) 有任何疑惑可以回復(fù)我~
#2

nc1199

promise的then方法執(zhí)行過(guò)程是異步的,這樣加個(gè)定時(shí)器,可能是想要在1秒后同時(shí)去爬取不同URL的頁(yè)面內(nèi)容把
2017-11-24 回復(fù) 有任何疑惑可以回復(fù)我~
#3

炸豬排超人 提問(wèn)者 回復(fù) nc1199

只是想有個(gè)緩沖
2017-11-28 回復(fù) 有任何疑惑可以回復(fù)我~

-_-!


0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
進(jìn)擊Node.js基礎(chǔ)(二)
  • 參與學(xué)習(xí)       76728    人
  • 解答問(wèn)題       242    個(gè)

本教程帶你攻破 Nodejs,讓 JavaScript流暢運(yùn)行在服務(wù)器端

進(jìn)入課程

可運(yùn)行代碼(交流學(xué)習(xí))

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)