Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了nodejs 实现抓取数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

nodejs 实现抓取数据

方式一:通过nodejs自身的方法抓取数据

需要模块:http或者https模块 、cheerio(实现dom获取)第三方模块 、fs文件操作、path路径

// 抓数据用的模块 httphttps,这两个都是内置模块(核心模块)

// 1.加载 https 模块
var https=require("https");

//加载cherrio模块,可以将抓取的网页通过jquery获取节点的方式获取需要的dom
var cheerio=require("cheerio");
var fs=require("fs");
var path=require("path");

// 2.构建options (构建请求信息:请求报文头)
var options={
  hostname:"www.qiushibaike.com",port:443,//https的端口是443
  path:"/",method:"GET",headers:{
    'Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/61.0.3163.100 Safari/537.36','Upgrade-Insecure-requests': '1','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6'
  }
}

// 3. 调用https的request()方法,向服务器发起请求,并且获取服务器返回的结构(页面代码)
var req=https.request(options,function(res){
   // 通过监听 res 的 data 事件 和 end 事件获取服务器返回的数据
  var buffer=[];
  // 监听data事件获取服务端返回的数据
  res.on('data',function(chunk){
    buffer.push(chunk); //将服务端获取的buffer数据全部追加至buffer数组中
  })

  // 监听end事件请求结束
  res.on("end",function(){
    buffer=buffer.concat(buffer);  //拼接buffer数组
    var html=buffer.toString('utf8');  //buffer转字符串
    // console.log(html);  

    // 通过 cheerio 模块加载 HTML 代码 
    var $=cheerio.load(html);
    var jokes=[];

    // 通过选择器选择我们要的元素
    // 1. 选取所有段子的div
    $('div.article.block.untagged.mb15').each(function(index,elE){
      // 提取段子作者
      var author=$(elE).find("h2").text();

      // 提取段子正文
      var content=$(elE).find("div.content span").text();

      //把每个段子放到数组中
      jokes.push({
        author:author,content:content
      });
    });  

    // 把jokes写入到文件
    fs.writeFile(path.join(__dirname,'jokes.json'),JSON.Stringify(jokes),function(err){
      if(err){
        throw err;
      }
      console.log('ok');
    })
  })
})

// 监听本次请求是否出错
req.on("error",function(err){
  console.log('出错了:' + err);
});

// 如果是post请求方式需要设置请求报文体
// req.write(postData);

// 结束本次请求
// 表示客户端向服务端发送的数据都发送完了
req.end();

方式二:

方式二是通过获取页面,通过正则表达式的方式,抓取需要的数据----实现原理和方式一基本一样,只是cheerio模板的dom操作,修改为正则匹配

方式三:通过nodejs中的第三方模块require()直接调用---最简单

// 加载模块
var request=require("request");  
var fs=require('fs');

// 1.直接调用request方法请求url,并且通过回调函数获取返回值
request('https://www.npmjs.com/package/request',function(err,res,body){
  //三个参数  报错信息,res响应,返回的页面
  
  //直接可加载完整个页面
  fs.writeFile('./a.html',body,function(err){
    if(err){
      throw err;
    }
    console.log('ok');
  })
})

大佬总结

以上是大佬教程为你收集整理的nodejs 实现抓取数据全部内容,希望文章能够帮你解决nodejs 实现抓取数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。