用node.js写一个小爬虫, 爬取慕课网免费课程章节信息

用node.js写一个小爬虫, 爬取慕课网免费课程章节信息

创建一个imooc-crawler.js

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

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 imooc-crawler.js命令

node imooc-crawler.js

这时我们便将整个页面载入了进来

创建一个crawler.js,我们现在将网页中有效内容整理出来

安装HTML解析模块cheerio

npm install cheerio

var http = require('http')
var cheerio = require('cheerio') // 引入HTML解析模块cheerio
var url = 'http://www.imooc.com/learn/348'

function filterChapters(html) {
	// 解析HTML代码,我们推荐使用 npm install cheerio
	
	// 将html页面装在进来
	var $ = cheerio.load(html)

	// 获取html中的class类名
	var chapters = $('.chapter')

	// 声明数据的数组
	var courseData = []

	// 遍历获取到的列表
	chapters.each(function(item) {
		// 遍历以后可以拿到单独的每一章节的数据
		var chapter = $(this)

		// 获取标题
		var chapterTitle = chapter.find('h3').text()
		// 获取每一小节的数据
		var videos = chapter.find('.video').children('li')

		// 包装章节数据
		var chapterData = {
			chapterTitle: chapterTitle,
			videos: []
		}

		// 编写每小节数据
		videos.each(function(item) {
			var video = $(this).find('a')
			var videoTitle = video.text();
			// 获取视频id
			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

			console.log(chapterTitle.trim() + '\n')
			item.videos.forEach(function(video) {
				console.log('【' + video.id.replace(/[\r\n]/g, "").trim() + '】' + video.title.replace(/\s*/g,"").trim())
			})
		})
}

http.get(url, function(res) {
	var html = ''

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

	res.on('end',function() {
		//将html作为一个参数传递给function,在函数内做信息的过滤
		var courseData =  filterChapters(html)

		printCourseInfo(courseData)
	})
}).on('error', function() {
	console,log('获取课程数据出错!')
})

运行

node crawler.js