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

时间: 2024-10-10 21:57:17

Node.js 爬虫初探的相关文章

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

Node.js abaike图片批量下载Node.js爬虫1.00版

这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaike图片批量下载Node.js爬虫1.00 // 2017年11月9日 //====================================================== // 内置http模块 var http=require("http"); // 内置文件处理模块,用于创

Node.js aitaotu图片批量下载Node.js爬虫1.00版

即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaotu图片批量下载Node.js爬虫1.00 // 2017年11月14日 //====================================================== // 内置http模块 var https=require("https"); // 内置文件处理模块,

Node.js 爬虫批量下载美剧 from 人人影视 HR-HDTV

这两天发现了一个叫看知乎的网站,是知乎大牛苏莉安做的,其中爬虫使用的 Node.js.这里就针对上一篇博客中的美剧小爬虫,改用 nodejs 进行实现一下,体验一下强大的 Node.js. 如果之前没有用过 JavaScript,不妨到 http://www.codecademy.com/  做一下 JavaScript 和 jQuery 的入门练习,快速熟悉一下基本语法,有其他语言基础一天时间足够.有基本的了解后,就会发现 JavaScript 的两大特点: 使用基于原型(prototype)

Node.js 爬虫,自动化抓取文章标题和正文

持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出现 √ 自动队列管理,持续化PUSH √ 自动抓取文章标题和正文 √ 性能优化 测试用例,自动化测试 我的测试环境: 9 台安装 ElasticSearch 1.3.2 的 centos,48G内存,8核 3 台 Node.js v0.11.14 的 centos,16G内存,8核,用作爬虫 3 台

node.js爬虫杭州房产销售及数据可视化

现在年轻人到25岁+,总的要考虑买房结婚的问题,2016年的一波房价大涨,小伙伴们纷纷表示再也买不起上海的房产了,博主也得考虑考虑未来的发展了,思考了很久,决定去杭州工作.买房.定居.生活,之前去过很多次杭州,很喜欢这个城市,于是例行每天晚上都要花一点时间关注杭州的房产销售情况,以及价格,起初我每天都在杭州的本地论坛,透明售房网上查看,每一天的房产销售数据,但是无奈博主不是杭州本地人,看了网页上展示的很多楼盘,但是我不知道都在什么地方啊,于是乎,看到价格合适的,总是到高德地图去搜索地理位置,每次

node.js http初探

在之前的例子中已经写了一个简单的使用http模块的例子 var http = require('http');  //请求http模块 var func = function(req,res) { res.writeHead(200,{'Content-Type' : 'text/plain'});//相应头200 表示正常返回 res.write("node.js") res.end(); }//web服务器收到请求时的处理函数 var server = http.createSer

node.js 爬虫以及数据导出到excel

//server.js 1 var http = require('http'), 2 url = require("url"), 3 superagent = require("superagent"), 4 cheerio = require("cheerio"), 5 async = require("async"), 6 eventproxy = require('eventproxy'), 7 fs = requir

node.js 爬虫动态代理ip

参考文章: https://andyliwr.github.io/2017/12/05/nodejs_spider_ip/ https://segmentfault.com/q/1010000008196143 代码: import request from 'request'; import userAgents from './common/userAgent'; //这里只做测试,所以用变量存,而实际应用中,应该使用数据缓存 const expiryTime = 10 * 60 * 100