用 NodeJS 写的一个小爬虫,抓取慕课网上指定ID老师的所有课程
Net crawler
使用express搭建的网络爬虫,爬取 慕课网上指定ID老师的所有课程。 async 代码部分是去年写的,当然今年我就重构了 Promise 部分的代码。
实现功能
- 点击 button 或使用 input 输入 ID
- 点击 confirm 自动获取该 id 下所有老师课程
- 如果该 ID 下无课程,则返回无数据
- 若有数据 则显示所有课程 和 课程下所有的视频
使用技术
- NodeJS
- express - Fast, unopinionated, minimalist web framework
- jade - Jade is a terse language for writing HTML templates.
- request - Simplified HTTP request client.
- cheerio - Fast, flexible & lean implementation of core jQuery designed specifically for the server.
- Promise
- AsyncJS - Async utilities for node and the browser
实现思路
- input 输入值点击 confirm button 后,向后端特定路径发起请求。
- 后端处理该请求,调用 imoocCrawler.startCrawler() 方法。
- 对于 startCrawler() 方法我做了两种实现,一种是 Promise, 一种是 Async 方法,两种方法作用一致也都有效,作对比学习使用。切换使用只需要在调用位置更改注释就好。
- 对指定的 慕课网老师ID 进行 URL 拼接 操作,Promise 链式调用 执行
getCoursesList()
方法使用request
开始请求 html body,使用cheerio.load(htmlBody)
解析 dom,then
调用getCoursesLinks()
方法解析所有课程名称及老师名称放入arr
中,then
调用getCourseChapters()
方法获取每门课下面所有的视频列表并返回arr
。 - 在imoocCrawler.startCrawler()的回调中,判断
arr
的长度,如果有值则返回 JOSN 格式字符串 data,或者返回 暂无数据的 msg.
Usage
- 首先 npm 安装 dependencies
npm install
- 启动项目
npm run start
Thanks
如果有任何问题,请提issue。
Thanks for your watching.