开始nodejs+express的学习+实践(9)

本文介绍了如何使用Node.js、Express、Superagent和Cheerio库构建网页爬虫,实现从指定网站抓取内容,并通过登录逻辑处理验证用户身份。详细解释了依赖管理、爬虫实现、登录流程以及使用Cheerio处理HTML内容的技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.爬虫抓取

爬虫抓取就是获取他人也面的内容,显示在自己的页面里,我们抓取https://cnodejs.org/getstart的:

135011_FZVR_2352644.jpg

显示在自己页面里。

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "express": "~3.4.8",
    "static-favicon": "~1.0.0",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "body-parser": "~1.0.0",
    "debug": "~0.7.4",
    "ejs": "~0.8.5",
    "formidable": "*",
    "mongodb":"*",
    "mongoskin":"*",
    "express-session":"*",
    "superagent":"*",
    "cheerio":"*"
  }
}

依赖加入,一个superagent一个cheerio,前面是获取页面内容,后面是筛选内容。

我们npm install下载依赖。

index.js引入:

var superagent = require('superagent');
var cheerio = require('cheerio');

我们把内容显示在list页面里,改变/list路由处理。

    app.get('/list',  function(req, res){
        var targetUrl = 'https://cnodejs.org/getstart';
        superagent.get(targetUrl)
            .end(function (err, ares) {
                console.log(ares.text);
                res.render('list', { text: ares.text });
            });
    });

地址输入:http://localhost:1234/list

显示了html页面源码:

140246_Xhs3_2352644.jpg

此时如果我们有jq类似工具,$(".xx").html()就可以拿到内容了,cheerio就是类似实现,返回的html我们当做dom树处理就可以了。

我们在/list加入cheerio的处理:

    app.get('/list',  function(req, res){
        var targetUrl = 'https://cnodejs.org/getstart';
        superagent.get(targetUrl)
            .end(function (err, ares) {
                console.log(ares.text);
                var $ = cheerio.load(ares.text);
                //通过CSS selector来筛选数据
                var arr=[];
                $('.markdown-text p strong').each(function (idx, element) {
                    console.log($(element).html());
                    arr.push($(element).html());
                });
                res.render('list', { text: arr });
            });
    });

list.html页面:

<!DOCTYPE html>
<html>
  <head>
    <title>list</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <ul>
        <% for(var i=0; i<text.length; i++) {%>
        <li><%= text[i] %></li>
        <% } %>
    </ul>
  </body>
</html>

显示:

141545_PXgK_2352644.jpg

好像有点问题,选的不是全是需要的内容,要获取看来只能一部分一部分的拿会正确显示。

2.登录逻辑

登录其实使用的就是查询处理,

  1. 用户发送请求,req会携带用户名和密码

  2. req的用户名作为依据,我们去数据库查询,会有2中结果,要吗不存在,要吗存在,

  3. 如果不存在直接登录失败,存在我们把数据库中用户名记录字段密码值返回

  4. 用户名存在,返回数据库密码和用户登录req的密码对比,要吗成功,要吗失败

  5. 成功,session的name赋值为用户名,进入首页,失败返回到登陆页

总结:

nodejs+express+mongodb+ejs!

转载于:https://my.oschina.net/tbd/blog/552803

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值