91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js(九)——HTTP小爬蟲

發布時間:2020-06-24 09:04:11 來源:網絡 閱讀:471 作者:mazongfei 欄目:web開發

HTTP爬蟲

網絡上每時每刻都有海量的請求,有從客戶端到服務器端的,也有服務器端到服務器端的

一般在瀏覽器里,我們是通過ajax來完成表單的提交或者是數據的獲取,

那在http模塊里呢get和request這兩個接口來完成數據的獲取或者是提交。

來個實例,爬一下51cto博客的數據

先從最簡單的爬蟲開始,爬源碼

示例代碼如下:

var http = require('http')
var url = 'http://mazongfei.blog.51cto.com/3174958/1909817'

http.get(url, function(res){
	var html = ''
	
	res.on('data',function(data){
		html += data
	})
	
	res.on('end',function(){
		console.log(html)
	}).on('error',function(){
		console.log('獲取博客頁面出錯')
	})
})

運行結果態度,截取一段如下:

Node.js(九)——HTTP小爬蟲源碼雖然爬下來了,但是對我們來說沒有多大意義,我們想拿到博客的標題信息,(因知識儲備不夠,未能爬到博客的代碼,初步理解是Reboot文件)改爬慕課網

那這個時候就需要我們分析源碼,把有價值的東西給篩選出來;

我們怎么對源碼進行分析呢,這里推薦一個模塊:cherio

它就像jquery一樣能夠操作裝載后臺html,簡單而又方便

首先先安裝一下該模塊: npm install cheerio

var http = require('http')
var cheerio = require('cheerio')
var url = 'http://www.imooc.com/learn/348'

function filterChapters(html){
	var $ = cheerio.load(html)
	var chapters = $('.chapter')
	//我們想拿到一個數組,格式如下:
	/*[{
		chapterTitle:'',
		videos:[
			title:'',
			id:''	
		]
	}]*/
	var courseData = []
	//遍歷的里面拿到數據
	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.push(chapterData)
	})
	
	return courseData
}

function printCourseInfo(courseData){
	//數組中的遍歷
	courseData.forEach(function(item){
		var chapterTitle = item.chapterTitle
		
		item.videos.forEach(function(video){
			console.log('【'+video.id+'】'+video.title);
		})
	})
}

http.get(url, function(res){
	var html = ''
	
	res.on('data',function(data){
		html += data
	})
	
	res.on('end',function(){
		//處理
		var courseData = filterChapters(html)
		printCourseInfo(courseData)
	}).on('error',function(){
		console.log('獲取頁面出錯')
	})
})

運行結果如下:

Node.js(九)——HTTP小爬蟲

如果出錯,進行console.log進行調試

有了編號,我們就可以自己組裝url地址【6712】并單獨訪問每一節的內容,

可以做更多的事情,目前爬蟲代碼先到此為止。

但還有另外一個問題:如果把每一節的內容都跑出來的話,

在代碼中的表現形式都是回調,在此只拿課程主頁這個內容,

如果去請求每一節的內容的話是異步的不一定是多長時間可以拿到內容,

所以是回調的話,就是一個不知時間長短的回調;所以就有一種異步

的回調編程方式,來讓我們組裝好隊列,得到我們想要的結果


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗源县| 汾西县| 阆中市| 南宁市| 宝应县| 邵阳市| 荔波县| 昭通市| 砚山县| 北海市| 江源县| 襄垣县| 德令哈市| 阿坝县| 化州市| 黄石市| 乳源| 兴文县| 罗源县| 亚东县| 古田县| 蒲城县| 丰镇市| 株洲县| 凌云县| 林周县| 佛坪县| 阳高县| 黑山县| 扎鲁特旗| 宝应县| 卢湾区| 吉安县| 宣威市| 稻城县| 潼南县| 塔城市| 抚顺县| 叶城县| 镇沅| 巴塘县|