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

郎恺
2023-12-01

爬虫跟静态服务器搭建

爬取之前要做的事:

首先下载npm的一个模块

命令:npm i crawler

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

注意:

使用第三方模块:

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

一、爬取网站的内容

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模块

使用第三方模块:

  1. 新建一个文件夹,文件夹名字非中文,名字也不能跟模块名字一样
  2. 进到文件夹里,命令运行:npm init -y 初始化一个文件
  3. 下载模块express
  4. 使用模块
// 创建一个静态资源服务器
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('服务器开启');

})
 类似资料: