js 爬虫抓取网页数据( 用get请求方式进行数据请求完成后我们可以执行一下)
优采云 发布时间: 2021-12-18 18:19js 爬虫抓取网页数据(
用get请求方式进行数据请求完成后我们可以执行一下)
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包来解析字符串
存储爬取目标URL后引入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);//在日志中打印错误具体描述
});
这时候,当你运行爬取网页的程序时,你会发现你的命令行会像Matrix一样爬取并打印网页的所有源代码,但我们需要的只是网页的数据信息页,并且不需要源代码字符串。显示,这次我们可以 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,然后在我们刚才提到的climb事件的最后写一个写文件操作。
fs.writeFile("./news/");
这时候我们需要提供一些参数,我们需要保证生成的txt文件的命名是唯一的,这样我们就可以在前面生成一个时间戳
var time = new Date().valueOf();//生成时间戳
然后将时间戳和开头的命名和文本放入
fs.writeFile("./news/nba"+time+".txt",oText);
然后再次运行程序,就可以生成我们的文件了