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

简介:

目的:

  数据采集

  写入本地文件备份

  构建web服务器

  将文件读取到网页中进行展示

目录结构:

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[i];

        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

 结果

 

转载:http://www.cnblogs.com/zqzjs/p/5487381.html

目录
相关文章
|
8月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
移动开发 数据挖掘 开发者
服务器发送事件(SSE)在现代Web开发中的关键作用
服务器发送事件(SSE)是HTML5标准协议,用于服务器主动向客户端推送实时数据,适合单向通信场景。相比WebSocket,SSE更简洁高效,基于HTTP协议,具备自动重连、事件驱动等特性。常见应用场景包括实时通知、新闻推送、数据分析等。通过Apipost等工具可轻松调试SSE,助力开发者构建高效实时Web应用。示例中,电商平台利用SSE实现秒杀活动通知,显著减少延迟并简化架构。掌握SSE技术,能大幅提升用户体验与开发效率。
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
522 35
|
11月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
存储 数据库 Python
使用HTTP POST协议将本地压缩数据发送到服务器
总的来说,使用HTTP POST协议将本地压缩数据发送到服务器是一个涉及多个步骤的过程,包括创建压缩文件,设置HTTP客户端,发送POST请求,以及服务器端的处理。虽然这个过程可能看起来复杂,但一旦你理解了每个步骤,就会变得相对简单。
418 19
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
378 22
|
缓存 人工智能 边缘计算
HTTP代理:网页加速的隐形引擎
本文深入探讨HTTP代理在提升网页加载速度中的核心作用与技术原理。通过请求中转、协议优化及传输层加速,结合智能缓存、动态压缩、全球负载均衡和协议升级四大黑科技,实现显著性能提升。同时分析其潜在代价与挑战,并展望边缘计算、AI驱动等未来趋势,为选型提供实用指南。
505 10
|
存储 缓存 搜索推荐
HTTP500代码怎么解决?常见的5xx网页错误及其原因
本文介绍了如何修复HTTP 500错误及常见的5xx网页错误。500错误表示服务器无法处理请求,可能由文件权限、脚本错误、数据库连接或配置问题引起。作为用户,可尝试重新加载页面、检查URL或清除缓存;作为网站所有者,需检查`.htaccess`文件、服务器日志、插件冲突及PHP版本等。此外,文章还列举了其他5xx错误(如502、503、504等)及其原因,帮助定位和解决服务器端问题,避免影响流量与搜索引擎排名。
9754 4
|
监控 网络安全
网页显示HTTP错误503怎么办?HTTP错误503解决方法
HTTP 503错误表示服务器暂时无法处理请求,通常是由于服务器过载或维护导致。常见解决方法包括:1. 等待一段时间再刷新页面;2. 检查服务器负载;3. 确认服务器是否在维护;4. 检查配置错误;5. 联系服务提供商。通过这些步骤,用户和管理员可以有效排查并解决该问题。
17667 3