慕课网的nodejs教程:http://www.imooc.com/learn/348

这人讲的很赞,特别是在事件驱动这点上,耳目一新。

视频略老,所以demo有些过时了,摸索着写了一个自己的小程序。

比较痛苦的是最近半年几乎没写过jQuery,不少用法实在想不起来,好在翻着API也不是什么问题。

首先,npm install cheerio,可以认为cheerio这货就是nodejs版本的jQuery,用法应该完全一致。

然后就可以愉快的敲代码了:

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 = $('div.chapter') var courseData = [] chapters.each(function () {
var chapter=$(this) // $(this)的用法可以让回调方法省略参数
// var chapterTitle = chapter.find('strong').text().trim()
var chapterTitle = chapter.find('strong').contents().filter(function() { return this.nodeType === 3; }).text().trim();
var videos=chapter.find('ul').children()
        var chapterData = { // 定义一个json以接收数据
chapterTitle : chapterTitle,
videos:[]
} videos.each(function () {
var video=$(this).find('a')
var temp=video.text().trim()
// var temp=video.contents().filter(function() { return this.nodeType === 3; }).text().trim();
var arr = temp.split('\n') // 多层标签的文本都拼到一起了,要拆开,取用需要的值
var videoTitle = arr[0].trim() + ' ' +arr[1].trim()
var id=video.attr('href').split('video/')[1].trim() chapterData.videos.push({ // 填写数据
title : videoTitle,
id : id
})
}) courseData.push(chapterData)
}) return courseData
}
// 输出函数 
function printCourseData(courseData) {
courseData.forEach(function (item) {
var chapterTitle = item.chapterTitle console.log(chapterTitle ) item.videos.forEach(function (video) {
console.log('---【'+video.id + '】 ' + video.title.trim() )
})
})
}
// 拿到源码,调用方法进行解析及输出
http.get(url, function(res){
var html = '' res.on('data', function (data) {
html+=data
}) res.on('end',function(){
var courseData = filterChapters(html)
printCourseData(courseData)
})
}).on('error', function () {
console.log('获取课程数据出错了')
})

仿教程 小爬虫抓取imooc数据的更多相关文章

  1. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

  2. Python小爬虫——抓取豆瓣电影Top250数据

    python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...

  3. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  4. 微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)

    很多人在朋友圈里转发一些文章,标题都是什么转疯啦之类,虽然大多都也是广告啦,我觉得还蛮无聊的,但是的确是有一些文章是非常值得收藏的,比如老婆经常就会收藏一些养生和美容的文章在微信里看. 今天就突发奇想 ...

  5. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  6. Node.js爬虫抓取数据 -- HTML 实体编码处理办法

    cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时, ...

  7. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

  8. iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  9. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

随机推荐

  1. JavaScript - 返回头部

    制作浮动top $(window).scroll( function() { var scrollValue=$(window).scrollTop(); scrollValue > 600 ? ...

  2. js 去掉前后空格

    前后去空格 return str.replace(/(^\s*)|(\s*$)/g, ""); 全部去空格 $("#panelbody").text().rep ...

  3. MySQL的binlog日志恢复(转)

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  4. ORACLE生成唯一标识函数

    -- Create tablecreate table TAB_TEST( id VARCHAR2(40) not null, fxnum VARCHAR2(40)) ---------------- ...

  5. Qt Quick + OpenGL + Bullet初次測试

    Qt Quick + OpenGL + Bullet初次測试 眼下Qt的Quick模块已经表现得很出色,并且可以预留接口来渲染OpenGL场景.一般来说,已经可以满足大部分编程须要了.这次呢.尝试使用 ...

  6. if else 的或(||)

    = "node01" ]; then ssh -p2222 root@.xx.xx.xxx else echo "hello world" #当$=='node ...

  7. gitlab yum 源

    https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/

  8. 利用ItextSharp 生成PDF文档改进版

    导入的ItextSharp.dll一定要是较高的版本 数据库表结构 生成的PDF样式 代码: namespace WebPDF { public partial class _Default : Sy ...

  9. jquery获取三种高度

    反复用到却一直记不住... var a = $(window).height() //设备的高度 var b = $(window).scrollTop() //滚动的高度 var c = $(doc ...

  10. ny716 River Crossing

    River Crossing 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Afandi is herding N sheep across the expanses ...