1、本次爬虫目标
从网站中爬取数据,并分析整理,我的目标是完整复刻出一个webapp网站以作练手,所以会对输入如何存到MongoDB做思考。爬取的数据先暂时存到json文件中;当然在实际中可以直接存到自己的MongoDB中,这样复刻出来的网站就是一个完整的网站了,至于视频播放,可以把视频地址爬下来写到特定字段,用户调用是直接拿原来网站的视频就可以了(只爬取慕课免费课程的所有数据)。
运行完会的到另个json文件,结构如下
free.json(记录课程的方向和分类)
freeCourse.json(记录所有课程的文件,但数据会有id与free中的分类一一对应)
2、创建项目
1)创建craler目录,再新建index.js文件。在目录下执行npm init命令,然后一直回车。
2)安装npm包,执行npm install mongoose(生成MongoDB用的id),npm install https,npm install cheerio;得到以下目录结构
3、获取课程的分类和方向的数据
const mongoose = require('mongoose');
const https = require('https');
const fs = require('fs');
const cheerio = require('cheerio');
var courses = [],
totalPage = 0,
orientations = [],//课程方向
orientationMap = {},
classifyMap = {},//课程分类
baseUrl = 'https://www.imooc.com',
freeCourseUrl = 'https://www.imooc.com/course/list';//免费课程
function fetchPage(url){
getFreeType(url);
}
//类型获取
function getFreeType(url) {
https.get(url, function(res){
var html = '';
res.setEncoding('utf-8')//防止中文乱码
res.on('data' ,function(chunk){
html += chunk;
})
//监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
res.on('end',function(){
var $ = chee