用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