新闻爬虫以及爬取结果查询网站搭建(四)

概要

本节主要介绍:

  • 如何搭建网站后端
  • 实现查询功能和时间热度分析。

网页后端框架

本次网站后端使用了Express框架

什么是Express:

  • Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
  • 使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

  • 可以设置中间件来响应HTTP请求
  • 定义了路由表用于执行不同的 HTTP 请求动作。
  • 可以通过向模板传递参数来动态渲染 HTML 页面。

Express的使用:

  • 首先创建目录作为当前工作目录
  • 通过npm init命令为应用创建package.json 文件。
  • 安装Express
npm install express --save
  • 文件中引入
var express=require("express");
      var app=express();

框架中目录结构

  • app.js: 启动文件,用来启动项目。
  • package.json: 存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时, 运行 npm install ,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块。
  • node_modules: 存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下。
  • public: 存放 image、css、js 等文件。
  • routes: 存放路由文件。
  • views: 存放视图文件或者说模板文件。
app.js

通过require()加装了express、path等模块,以及routes文件夹下的index.js和users.js路由文件。

  • 生成一个express实例app。
    var app = express();

  • 设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。
    app.set(‘views’, path.join(__dirname, ‘views’));

  • 设置视图模板引擎为 ejs。
    app.set(‘view engine’, ‘ejs’);

  • 加装日志中间件
    app.use(logger(‘dev’));

  • 加载解析urlencoded请求体的中间件。
    app.use(bodyParser.urlencoded({ extended: false }));

  • 加载解析cookie的中间件。
    app.use(cookieParser());

  • 设置public文件夹为存放静态文件的目录。
    app.use(express.static(path.join(__dirname, ‘public’)));

  • 路由控制器。
    app.use(’/’, routes);
    app.use(’/users’, users);

  • 导出app实例供其他模块调用。
    module.exports = app;

bin/www 文件:​
  • #!/usr/bin/env node:表明是 node 可执行文件。
  • var debug = require(‘debug’)(‘blog’):引入debug模块,打印调试日志。
  • var app = require(‘…/app’):引入我们上面导出的app实例。
  • app.set(‘port’, process.env.PORT || 3000):设置端口号。
  • 监听3000端口
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
routes/index.js 文件:

生成一个路由实例用来捕获访问主页的GET请求,导出这个路由并在app.js中通过

var indexRouter = require('./routes/index');
app.use('/', indexRouter);

加载。

实现查询功能和时间热度分析

根据新闻标题进行搜索

采用模糊查询:

var fetchSql = "select url,source_name,title,publish_date " + "from news where title like '%" + req.query.title + "%' Order By publish_date desc" ;
    pgsql.query_noparam(fetchSql, function(err, result, fields) {
        res.end(JSON.stringify(result.rows));
    });

根据网站名进行搜索

 var fetchSql = "select url,source_name,title,publish_date " +
        "from news where source_name like '%" + req.query.source_name + "%' Order By publish_date desc" ;
    pgsql.query_noparam(fetchSql, function(err, result, fields) {
        // console.log("here");
        res.end(JSON.stringify(result.rows));
    });

根据关键词进行搜索

res.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8' }); 
        var fetch = "select news.url,news.title,news.source_name,keywords.word " +
        "from keywords,news where keywords.word like '%" + req.query.keyword + "%' and news.id_news=keywords.id_news" ;
        pgsql.query_noparam(fetch, function(err, result, fields) {
        // console.log("here");
            res.end(JSON.stringify(result));
        });

时间热度分析

var fetchSql = "SELECT publish_date,count(*) as Num FROM news WHERE content like '%" + req.query.keyword + "%' group by publish_date order by publish_date desc;";
    pgsql.query_noparam(fetchSql, function(err, result, fields) {
        res.end(JSON.stringify(result));
    });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值