Node.js小爬虫(express4.x)

     学习Node也有一段时间了,今天跟大家分享一个node的小爬虫案例,结合express框架;

1.准备阶段

    材料:所用到的包,http,iconv-lite,cheerio,fs;

    介绍:http:用来处理url爬取地址;

             iconv-lite:用来处理不同网页编码格式不同所带来的乱码问题;

             cheerio:一个非常强大的功能就是可以像jQuery那样过滤跟筛选爬取位置;

             fs:文件模块,毫无疑问,如果爬取到一些有用的信息,自然是希望保存下来下次继续看;

2.爬虫集装箱的准备

     小编使用的工具是webstorm,首先选好工作目录之后,直接全局安装最新版的淘宝镜像,然后 cnpm install  express -g

     全局安装express,方便后期使用;再之后就是,如果你安装的版本是express4.x之后的,那么需要继续安装一个express dos命令行工具; cnpm, install express -generator -g

    下面继续进行操作:express -e 项目名    自动生成目录文件;

3.爬虫进行时

    第一步、首先我们在routes目录下面新定义一个我们自己的路由crawler.js文件,代码如下:

var express = require('express');
var router = express.Router();
router.get("/",function (req,res,next) {
  var htp=require("http");
    var url="http://xyh.lut.cn/";
    htp.get(url,function (re) {
        var html="";
        re.on("data",function (data) {
            //加载网页转码模块,放在on函数里面,进行转码,这样就可以保证不乱码
            var icon=require("iconv-lite")
            var change_data = icon.decode(data,'gb2312');
            html+=change_data;
            console.log(html)
        })
        re.on("end",function () {
            var cheerio=require("cheerio");
            var $=cheerio.load(html)
            var chapters=$("a");
            var database=[];
            var fs=require("fs");
            var ws=fs.createWriteStream("end.txt");
            ws.once("open",function () {
                console.log("文件创建成功")
            });
            ws.once("close",function () {
                console.log("写入完毕")
            });
            res.download("http://img.zcool.cn/community/018d4e554967920000019ae9df1533.jpg@900w_1l_2o_100sh.jpg","images");
            console.log("download successfully")

            console.log(chapters.length)
                for(var i=0;i<chapters.length;i++){
                    ws.write($(chapters[i]).text()+"\n");
                    console.log($(chapters[i]).text())
                database.push($(chapters[i]));}
                ws.end();
                res.render("index",{
                    title:"我的爬虫小项目",
                    data:database
                })
        }).on("error",function () {
            console.log("不好意思,爬取程序出错了");
        })
    })

   
});
 

//最后将路由暴露出去

module.exports=router;

第二步、在app.js中间件儿中使用这个路由

var crawler=require("./routes/crawler");

app.use("/",crawler);

第三步、在ejs模板中渲染数据

<!DOCTYPE html>
<html>
  <head>
    <title><%=title%></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
    <script src="/javascripts/jquery-3.2.1.min.js"></script>
    <style>
      strong{
        color: firebrick;
        font-size: 32px;
      }
      p{
        color: black;
      }
      h2{
        color: red;
      }
    </style>
    <script>
        $(function () {
            $.get("json",function (d) {
                alert(d)
                $("span").html(d);
            });
        });
    </script>
  </head>
  <body>
    <strong>我的爬虫小项目</strong>
    <h2>工大风景图(航拍)爬取</h2>
    <% for(var i=0;i<data.length;i++){ %>
    <p><%=data[i]%></p>
    <% } %>
    <h2>爬取成功!!!</h2>
    <span></span>
  </body>
</html>
分页符

下面部分就是在前台网页的内容:

下面是调用fs模块之后持久在文件中的数据


      怎么样!小伙伴们,看完此篇博客,你的收获是什么呢?如果有好的学习方法可以一起交流奥!欢迎在评论区留下你的联系方式喔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值