大佬教程收集整理的这篇文章主要介绍了nodejs 实现抓取数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
需要模块:http或者https模块 、cheerio(实现dom获取)第三方模块 、fs文件操作、path路径
// 抓数据用的模块 http、https,这两个都是内置模块(核心模块) // 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操作,修改为正则匹配
// 加载模块 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,请注明来意。