设为首页 收藏本站
查看: 2605|回复: 0

[经验分享] NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)

[复制链接]

尚未签到

发表于 2017-2-23 08:06:05 | 显示全部楼层 |阅读模式
  目的:
    数据采集
    写入本地文件备份
    构建web服务器
    将文件读取到网页中进行展示

  目录结构:
DSC0000.png

  package.json文件中的内容与上一篇一样:NodeJs+Request+Cheerio 采集数据
  request :https://github.com/request/request 使得请求变得更容易,简单
  cheerio:https://github.com/cheeriojs/cheerio 用来解析dom结构,类似jQuery,挺好用
  app.js文件:



/**
* 数据采集
* 写入本地文件备份
* 创建web服务器
* 将文件读取到网页中进行展示
*/
//引入需要的包
var http = require('http');
//var path = require('path');
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
//定义常量
var dolphin = 'http://cn.dolphin.com/blog';
const filePath = '/NodeJsTest/test_7/sampleCollection/localFiles/opts.txt';
//数据请求
function dataRequest(dataUrl) {
//发送请求
    request({
url : dataUrl,
method : 'GET'
},function(err, red, body) {
//请求到body
if(err){
console.log(dataUrl);
console.error('[ERROR]Collection' + err);        
return;
}
if(dataUrl && dataUrl === dolphin){
dataPraseDolphin(body);
}
})
}
/**
* 解析html
*/
function dataPraseDolphin(body) {
var $ = cheerio.load(body);
var atricles = $('#content').children('.status-publish');
for(var i = 0;i < atricles.length;i++){
var article = atricles;
var $a = $(article).find('.post-title .entry-title a');
var $p = $(article).find('.post-content p');
var $aVal = $($a).text();
var $pVal = $($p).text();
var localData;
if($p){
localData = '--------------'+ (i+1) +' Chapter------------------' + '\n'
+ '标题:' + $aVal + '\n'
+ '简介:' + $pVal + '\n'
+ '时间:' + new  Date + '\n'
+ '---------------------------------------------------' + '\n';
console.log(localData);
writeToLocal(localData,i);
}

}
}
/**
* [writeToLocal description]
* 将解析的数据 写入本地文件进行备份
*/
function writeToLocal(dataPage,fj){
console.log('-------------准备写入文件------------------------')
//同步写入文件,一般使用异步好
    fs.appendFileSync(filePath, dataPage);
}
/**
* 创建web服务器
* @return {[type]} [description]
*/
function createServer(){
http.createServer(function(req,resp){
console.log('服务启动!')
wirteToPage(resp);
}).listen(7000);
}
/**
* 将抓取的数据写入页面
*/
function wirteToPage(resp){
fs.readFile(filePath,function(err,data){
if(err){
console.log(err);
resp.writeHead(404,{
'Content-Type':'text/html'
})
}else{
resp.writeHead(200,{
//响应头添加编码格式解决乱码问题
'Content-Type': 'text/plain;charset=utf-8'
});
//resp.write('<head><meta charset="utf-8"/></head>');      
            resp.write(data.toString());
}
resp.end();
})
}
//开始发送请求 并 采集数据
dataRequest(dolphin);
createServer();
  Sublime 中 ctrl+B 执行
  浏览器地址栏请求:http://localhost:7000
   结果:
DSC0001.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345863-1-1.html 上篇帖子: Window下配置NodeJs环境详解 下篇帖子: NodeJS+Express下构建后端MVC文件结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表