基于node.js制作网络爬虫爬取网页数据

1,首先下载并安装 node.js
2.准备cheer.io包 cheer.io
3.我们先要明确爬虫程序要爬取得网站地址
定义变量url存储爬取地址

var url = "http://sports.sina.com.cn/nba/1.shtml";//保存爬取目标网址

引入http模块

var http = require("http");//引入标准的http模块

用get请求方式进行数据请求

http.get(url,function(res){
	//程序发送一个http请求的时候  此函数就会立马执行 res后端返回过来并且已经被解析的HTTP报文
	 var html ="";
	res.on("data",function(chunk){
		//有一段流接收到之后就会执行的回调函数
		html += chunk;//把每一段流都拼接起来
	});//监听

	res.on("end",function(){
		//所有信息传输完毕后所执行的回调函数
		console.log(html);
	});

});//向网络发送GET请求,请求网络资源

完成后我们可以执行一下,打开window键+R键打开运行输入cmd打开命令行如下:
在这里插入图片描述
然后回车,你就会发现你已经获取了目标网页得一些信息,但是他只是以字符串得形式显示出来,并且不整齐
在这里插入图片描述
这个时候我们就需要cheerio包来解析字符串
在储存爬取目标网址后面引入cheerio包

var cheerio = require("cheerio");

然后进行DOM字符串解析

http.get(url,function(res){
	//程序发送一个http请求的时候  此函数就会立马执行 res后端返回过来并且已经被解析的HTTP报文
	 var html ="";
	res.on("data",function(chunk){
		//有一段流接收到之后就会执行的回调函数
		html+=chunk;//把每一段流都拼接起来
	});//监听

	res.on("end",function(){
		var $ = cheerio.load(html);//解析Dom字符串
		$("#right a").each(function(){
			var articleUrl = $(this).attr("href");
			http.get(articleUrl,function(res){
				var html = "";
				res.on("data",function(chunk){
					html+=chunk;
				});
				res.on("end",function(){
					console.log(html);
				});
			});
		});
	});

});//向网络发送GET请求,请求网络资源

然后不断爬取目标网页,但是有时候会因为网络原因会出现错误
所有我们还需要进行一个错误处理操作

			//监听错误事件
			}).on("error",function(err){
				//对程序意外错误进行处理
				console.log(err.message);//在日志中打印错误具体描述
			});

这个时候你再运行程序进行网页爬取得时候就会发现你的命令行会像黑客帝国那样刷刷把网页源码全部爬取打印出来,但是我们需要的只是网页的哪些数据信息,不需要源码字符串显示,这个时候我们可以res.on(“end”,function(){});再次进行字符串解析

				res.on("end",function(){
					var $ = cheerio.load(html);//解析Dom字符串
				var oText = $("#artibody").text();
				console.log(oText);
				});

然后我们就可以看到刚才爬取得数据已经是过滤掉了得,只显示需要得文本信息
如图下:
在这里插入图片描述
爬取到需要得信息数据后我们还可以给它进行文件流得操作,把爬取得信息保存到本地文件夹里面
进行文件流操作时,我们就需要引入fs模块

var fs = require("fs");

然后我们再在项目文件夹下面新建一个文件夹news,然后再在我们刚才的结束爬去事件里面写入一个写入文件操作

fs.writeFile("./news/");

这个时候我们就需要提供一些参数了,我们需要确定生成的txt文件的命名是唯一性的,所以我们可以在前面生成一个时间戳

var time = new Date().valueOf();//生成时间戳

然后把时间戳和开头命名以及文本放进去

fs.writeFile("./news/nba"+time+".txt",oText);

然后再运行一下程序,我们的文件就可以生成了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值