Node.js 爬虫初探
前言
在学习慕课网视频和Cnode新手入门接触到爬虫,说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http、网页分析工具cherrio。 使用http直接获取url路径对应网页资源,然后使用cherrio分析。 这里我主要是把慕课网教学视频提供的案例自己敲了一边,加深理解。在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用。
知识点
①:superagent抓去网页工具。我暂时未用到。
②:cherrio 网页分析工具,你可以理解其为服务端的jQuery,因为语法都一样。
效果图
1、抓取整个网页

2、分析后的数据, 我这里是以慕课网提供的示例为案例实现的例子。

爬虫初探源码分析
var http=require('http');
var cheerio=require('cheerio');
var url='http://www.imooc.com/learn/348';
/****************************
打印得到的数据结构
[{
	chapterTitle:'',
	videos:[{
		title:'',
		id:''
	}]
}]
********************************/
function printCourseInfo(courseData){
	courseData.forEach(function(item){
		var chapterTitle=item.chapterTitle;
		console.log(chapterTitle+'\n');
		item.videos.forEach(function(video){
			console.log(' 【'+video.id+'】'+video.title+'\n');
		})
	});
}
/*************
分析从网页里抓取到的数据
**************/
function filterChapter(html){
	var courseData=[];
	var $=cheerio.load(html);
	var chapters=$('.chapter');
	chapters.each(function(item){
		var chapter=$(this);
		var chapterTitle=chapter.find('strong').text(); //找到章节标题
		var videos=chapter.find('.video').children('li');
		var chapterData={
			chapterTitle:chapterTitle,
			videos:[]
		};
		videos.each(function(item){
			var video=$(this).find('.studyvideo');
			var title=video.text();
			var id=video.attr('href').split('/video')[1];
			chapterData.videos.push({
				title:title,
				id:id
			})
		})
		courseData.push(chapterData);
	});
    return courseData;
}
http.get(url,function(res){
	var html='';
	res.on('data',function(data){
		html+=data;
	})
	res.on('end',function(){
		var courseData=filterChapter(html);
		printCourseInfo(courseData);
	})
}).on('error',function(){
	console.log('获取课程数据出错');
})
参考资料
https://github.com/alsotang/node-lessons/tree/master/lesson3
http://www.imooc.com/video/7965
Node.js 爬虫初探的更多相关文章
- Node.js爬虫-爬取慕课网课程信息
		第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ... 
- node.js爬虫
		这是一个简单的node.js爬虫项目,麻雀虽小五脏俱全. 本项目主要包含一下技术: 发送http抓取页面(http).分析页面(cheerio).中文乱码处理(bufferhelper).异步并发流程 ... 
- Node.js aitaotu图片批量下载Node.js爬虫1.00版
		即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ... 
- Node.js umei图片批量下载Node.js爬虫1.00
		这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ... 
- Node.js abaike图片批量下载Node.js爬虫1.01版
		//====================================================== // abaike图片批量下载Node.js爬虫1.01 // 1.01 修正了输出目 ... 
- Node.js abaike图片批量下载Node.js爬虫1.00版
		这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ... 
- Node JS爬虫:爬取瀑布流网页高清图
		原文链接:Node JS爬虫:爬取瀑布流网页高清图 静态为主的网页往往用get方法就能获取页面所有内容.动态网页即异步请求数据的网页则需要用浏览器加载完成后再进行抓取.本文介绍了如何连续爬取瀑布流网页 ... 
- Node.js 爬虫爬取电影信息
		Node.js 爬虫爬取电影信息 我的CSDN地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影 ... 
- Node.js 爬虫,自动化抓取文章标题和正文
		持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ... 
随机推荐
- 在SQLSERVER里,怎么让别人只能输入一个字母的约束该怎么写?就是26个字母中的任意一个?
			alter table 表名 add constraint ck_char check(自段名 like '[a-z]' or 自段名 like '[A-Z]') 
- DevExpress控件的GridControl控件小结
			DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ... 
- ecma6  yield
			function * generator(k){ console.log('begin'); var x = yield k; console.log('x:',x); var y = yield x ... 
- 探索c#之一致性Hash详解
			阅读目录: 使用场景 算法原理 虚拟节点 代码示例 使用场景 以Redis为例,当系统需要缓存的内容超过单机内存大小时,例如要缓存100G数据,单机内存仅有16G时.这时候就需要考虑进行缓存数据分片, ... 
- Redis系列(五)-Opserver的监控
			阅读目录: 基本介绍 使用配置 部署实例 面板属性 基本介绍 Opserver是Stack Exchange的一个开源监控系统,基于Net.MVC开发,所以Net程序员可以轻松基于它二次开发.它主要监 ... 
- 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
			将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ... 
- C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword)
			C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword) +BIT祝威+悄悄在此留下版了个权的信息说: C#申请一 ... 
- Leetcode 刷题计划
			Two Sum 21.4% Medium Given an array of integers, return indices of the two numbers such that t ... 
- 【原】Python 用例:二进制写入和读取文件内容
			import pickle as p shoplistfile='shoplist.data' shoplist=['apple','carrot'] # because the dump opera ... 
- Cocos2d-x 3.x游戏开发之旅
			Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ... 
