仿教程 小爬虫抓取imooc数据
慕课网的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数据的更多相关文章
- 爬虫抓取页面数据原理(php爬虫框架有很多 )
爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...
- Python小爬虫——抓取豆瓣电影Top250数据
python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...
- 怎么用Python写爬虫抓取网页数据
机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...
- 微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)
很多人在朋友圈里转发一些文章,标题都是什么转疯啦之类,虽然大多都也是广告啦,我觉得还蛮无聊的,但是的确是有一些文章是非常值得收藏的,比如老婆经常就会收藏一些养生和美容的文章在微信里看. 今天就突发奇想 ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- Node.js爬虫抓取数据 -- HTML 实体编码处理办法
cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时, ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
随机推荐
- OpenGL核心之SSAO技术解说(一)
笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- hdu 4961 Boring Sum(高效)
pid=4961" target="_blank" style="">题目链接:hdu 4961 Boring Sum 题目大意:给定ai数组; ...
- 深度学习图像标注工具VGG Image Annotator (VIA)使用教程
VGG Image Annotator (VIA)是一款开源的图像标注工具,由Visual Geometry Group开发. 可以在线和离线使用,可标注矩形.圆.椭圆.多边形.点和线.标注完成后,可 ...
- c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题
c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...
- CSS选择器、层叠相关的基础知识
CSS是Cascading Style Sheets的英文缩写,即层叠样式表.CSS2.1是W3C于2007年发布,现在推荐使用的.CSS3现在还处于开发中,有部分浏览器的新版本支持. 1. CSS ...
- android笔记---AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- uniqueIdentifier在ios7不支持后的替代方法
UIDevice的uniqueIdentifier方法在ios7就不支持了, 为了获得设备相关的唯一标识符, 参考了这里:https://github.com/Itayber/UIDevice-uni ...
- spring整合kafka项目生产和消费测试结果记录(一)
使用spring+springMVC+mybatis+kafka做了两个web项目,一个是生产者,一个是消费者. 通过JMeter测试工具模拟100个用户并发访问生产者项目,发送json数据给生产者的 ...
- ios开发中,xib加载view,loadNibNamed方法奔溃原因之一
xib中某一属性在代码中已删除,但在xib中没有解除关联
- VC调用MATLAB
最近项目要用VC调用MATLAB,今天闲来无事,在这里稍微总结了一下初级的用法,大家共同学习: 首先在MATLAB Command Window里输入mbuild -setup,一步步走 还有一个me ...