node.js(三)之crawler爬虫模块跟express模块

    技术2025-01-08  16

    爬虫跟静态服务器搭建

    爬取之前要做的事:

    首先下载npm的一个模块

    命令:npm i crawler

    下载完你会得到一个名字是node_modules文件夹跟一个package-lock.json文件

    注意:

    使用第三方模块:

    新建一个文件夹,文件夹名字非中文,名字也不能跟模块名字一样进到文件夹里,命令运行:npm init -y 初始化一个文件下载模块使用模块

    一、爬取网站的内容

    var Crawler = require('crawler') const fs = require('fs') var c = new Crawler({ maxConnections: 10, callback: function (error, res, done) { if (error) { console.log(error); } else { var $ = res.$; // console.log($('title').text()); //文件夹路径自定义 fs.writeFile('./temp/1.txt', $('body').text(), (err) => { if (err == null) { console.log('爬去成功') } }) } done() } }) //爬取的网站内容的地址 c.queue('https://ncov.dxy.cn/ncovh5/view/pneumonia')

    二、爬取网站的文件

    var Crawler = require("crawler"); var fs = require('fs'); var c = new Crawler({ encoding:null, jQuery:false,// set false to suppress warning message. callback:function(err, res, done){ if(err){ console.error(err.stack); }else{ fs.createWriteStream(res.options.filename).write(res.body); } done(); } }); c.queue({ uri:"https://nodejs.org/static/images/logos/nodejs-1920x1200.png", filename:"nodejs-1920x1200.png" headers:{'User-Agent':'requests'} });

    三、爬取网站的视频

    注意:在爬取网站的视频的时候为了防止人家的反爬技术,我们需要伪装

    就是伪装浏览器请求(我们的是服务端请求)

    headers:{'User-Agent':'requests'}

    四、express模块

    使用第三方模块:

    新建一个文件夹,文件夹名字非中文,名字也不能跟模块名字一样进到文件夹里,命令运行:npm init -y 初始化一个文件下载模块express使用模块 // 创建一个静态资源服务器 const express = require('express') const app = express() //将项目公开 app.use(express.static('web')) app.listen(8089, () =>{ console.log('服务器开启了') })

    五、实现一个简单的get接口

    /** * 接口:得到一条随机笑话 * 接口地址:/joke * 请求方式:get * 参数:无 * 返回:一条笑话 */ // 导包 const express = require('express') // 创建服务器 const app = express() // 写接口 app.get('/joke', (req, res) => { let arr = ['狐狸走路会摔跤,因为狡猾,哈哈', '蔡徐坤是男的', '徐坤爱碧落'] let index = Math.floor(Math.random() * 3) //1,2,0 // 返回笑话 res.send(arr[index]) }) // 开启服务器 app.listen(4399, () => { console.log('服务器开启了') })

    六、实现一个带参数的post接口

    /* 接口:用户登录 请求地址:/login 请求方式:post 请求参数:username password 返回值:登录成功、登录失败 */ // 导包 const express = require('express') const bodyParser = require('body-parser') // 创建服务器 const app = express() app.use(bodyParser.urlencoded({extended:false})) // 写接口 app.post('/login', (req, res) => { console.log(req.body) // 由于是post方式传递过来的 参数,所以用req.query这种方式拿不到 // 使用第三方模块:body-parser console.log(req.body) if (req.body.username == 'lyb' && req.body.password == '666') { res.send({ code: 200, msg:'登录成功' }) } else { res.send({ code: 400, msg:'账号密码不对' }) } res.send('sb') }) // 开启服务器 app.listen(8089, () => { console.log('f服务器开启了') })

    七、实现一个传文件的接口

    第三方模块:multer

    /* 注册接口 接口地址:/register 请求方式:post 请求参数:username password usericon(用户头像) 返回数据:注册成功、失败 */ const express = require('express') const multer = require('multer') const app = express() // 用包:创建一个文件夹 var upload = multer({ dest: 'uploads/' }) app.post('/register', upload.single('usericon'), (req, res) => { res.send('sb') // file:传递过啦的信息 console.log(req.file,req.body) }) app.listen(4399, () => { console.log('服务器开启'); })
    Processed: 0.009, SQL: 9