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

结果:

时间: 2024-10-06 22:03:34

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

NodeJs+Request+Cheerio 采集数据

目的:采集网站文章. 两个依赖项: request :https://github.com/request/request cheerio:https://github.com/cheeriojs/cheerio package.json文件: { "name":"zqz", "version":"1.0.1", "private":false, "dependencies":{ &qu

nodeJS(request+cheerio+pump)稳定爬取SSR网页数据

记录自己的爬虫经验 本次是爬取某SSR网站列表页及详情页数据,包括文本及图片,将数据存入MongoDB数据库,将图片下载至本地: 首先呢,用到的nodeJS模块有: request: 用于请求网址内容或请求图片内容 cheerio: 通俗的讲,可以当做jQuery使用 pump: 一种管道,操纵数据流,比原生的pipe好用,可操控性强,具体用法可去npm查询 path: 读取操作文件路径 fs: 操作文档读写等 第一步:引入需要用到的相关模块,建议用yarn安装以下模块 const reques

Android发送数据到web服务器4种方式

/** * Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @param path 要求服务器servlet的地址 * @return 返回的boolean类型的参数 * @throws Exception */ public Boolean submitDat

python脚本采集服务器数据通过API提交到django web服务器,然后展示在页面上

采集服务器的信息的python程序 #coding:utf-8 import psutil import urllib import urllib.request import urllib.parse #import urllib2 import requests #获取数据 cpuData = psutil.cpu_times() #处理数据 cpuMax = cpuData.user+cpuData.system+cpuData.idle cpuUsed = cpuData.user+cp

C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

转自原文C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 阅读目录 1.HtmlAgilityPack简介 2.XPath技术介绍与使用 3.采集天气网站案例 4.资源 第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好).几

抓取网页中的内容、如何解决乱码问题、如何解决登录问题以及对所采集的数据进行处理显示的过程

本文主要介绍如何抓取网页中的内容.如何解决乱码问题.如何解决登录问题以及对所采集的数据进行处理显示的过程.效果如下所示: 1.下载网页并加载至HtmlAgilityPack 这里主要用WebClient类的DownloadString方法和HtmlAgilityPack中HtmlDocument类LoadHtml方法来实现.主要代码如下. var url = page == 1 ? "http://www.cnblogs.com/" : "http://www.cnblogs

51采集PCF8591数据通过ESP8266上传C#上位机

效果    如果想用手机做可以参考这篇文章,自己的协议规定在文章中 android 之TCP客户端编程 ---恢复内容开始--- 请问一下博客为什么又不能直接复制粘贴图片了呢............ 先看8266的配置,8266我是用的Lua语言写的,,因为方便快捷....这次写的当然比以前完善...... 关于WIFI模块可以看这几篇 ESP8266使用详解 NodeMCU初探 ESP8266刷AT固件与nodemcu固件 (一)Lua脚本语言入门 (二)Lua脚本语言入门 (三)Lua脚本语

MFC--根据串口采集的数据借助GDI绘制曲线

根据采集到的数据绘制曲线 在串口编程中会涉及到这样一个问题,就是将采集到的数据以曲线的形式展示出来,大家自然而然会想到采用方便快捷的控件进行编程.编程周期短,完成任务快,但是真实情况来看,控件会实现很多你用不到的功能,实现机制也不可见,这样在功能上会造成浪费,对性能和实现的效果上会有一些不可控,所以在这一类编程中建议自己通过设备上下文自己编写适合自己软件的曲线图. 我要实现的功能如下图: 这是一个在网上下载的例程运行的效果,我中间采用的编程思想大多来源这里,只是针我要实现的功能进行了修改.因为我

八,ESP8266 文件保存数据

应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令版本的 一,  http://www.cnblogs.com/yangfengwu/p/5205570.html    发AT指令,,其实AT指令就是事先用SDK内部写好了 二,  http://www.cnblogs.com/yangfengwu/p/5295632.html    这个呢是配合路由器实现远程,,其实可以买个域名,或者用