学习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模块之后持久在文件中的数据
怎么样!小伙伴们,看完此篇博客,你的收获是什么呢?如果有好的学习方法可以一起交流奥!欢迎在评论区留下你的联系方式喔。