爬虫+数据保存

爬虫以及数据保存

这篇文章, 分享如何将爬虫爬到的数据, 保存到excel表格当中。

文章目录

1.安装保存数据的第三方库openpyxl并使用

2.爬虫加单表数据保存

3.爬虫加多表数据保存

4.实战

一、安装保存数据的第三方库openpyxl并使用

我们需要安装openpyxl的第三方库

安装命令:

pip install openpyxl

安装成功后我们就可以使用了。

我们导入第三方库:

import openpyxl

创建对象 工作簿:

wb = openpyxl.Workbook()

选择工作子表(选择第一个工作子表)

ws = wb.active

修改工作子表的名字:

ws.title = '测试子表'

添加数据 执行一次append就是添加一行数据:

ws.append(['姓名','性别','年龄'])

注意:列表中的每一个数据对应的是表格中的一个单元格内容。

从第二行开始添加详细数据(因为刚才已经添加过一行了):

ws.append(['小1','女',18])
ws.append(['小2','男',18])
ws.append(['小嘿','女',20])
ws.append(['xoap','女',18])

这里我们添加了四行数据。

生成文件保存数据, 方法是工作簿对象.save(‘文件的路径’):

wb.save('学生表.xlsx')

完整代码:

# 创建对象 工作簿
import openpyxl
wb = openpyxl.Workbook()
# 选择工作子表(第一个)
ws = wb.active
# 修改工作子表的名字
ws.title = '测试子表'
# 添加数据 执行一次append就是添加一行数据
ws.append(['姓名','性别','年龄']) # 列表中的每一个数据对应的是表格中的一个单元格内容

# 第二行开始添加详细数据
ws.append(['小1','女',18])
ws.append(['小2','男',18])
ws.append(['小嘿','女',20])
ws.append(['xoap','女',18])


# 生成文件保存数据
# wb.save('文件的路径')
wb.save('学生表.xlsx')

运行结果:

在用一个文件夹下面, 多出了一个叫学生表.xslx的excel表格。这张表格, 就是我们刚刚用代码去创建的的表格。

在这里插入图片描述

同时, 我们打开表格来看一看数据:

在这里插入图片描述

我们发现信息成功的写入表格, 最下面那个测试子表, 就是对应 ws.title = ‘测试子表’ 这行代码。表格标题和表格里面的内容, 都是用append方法去添加的,注意, 这里append的方法, 只会增加固定的行, 比如我在第三个append里面修改要添加的数据, 把ws.append([‘小2’,‘男’,18])改为ws.append([‘小22’,‘男’,19]), 运行过后, 表格里面的第三行数据, 会发生变化, 它不会因改变信息而添加数据, 只会覆盖第三行的数据。如果想要追加数据, 那就必须写更多的append函数去追加数据。

我们还有一种方式去创建excel表格并且保存数据(这种方法, 适合创建多张excel表格, 并且同时保存多张excel表格数据)。

代码:

import openpyxl
wb = openpyxl.Workbook()
list_name = ["小明", "小红", "小强", "小慧", "小蓝"]
list_gender = ["男", "女", "男", "女", "男"]
list_age = [20, 19, 21, 19, 19]
for i in range(100):
    # 创建新的子表
    sheet = wb.create_sheet(title=f'第{i}张表格')
    # 添加表头
    sheet.append(["姓名", "性别", "年龄"])
    for i in range(5):
        sheet.append([list_name[i], list_gender[i], list_age[i]])
# 删除第一个默认的子表
wb.remove(wb.active)
# 保存表格
wb.save('全部球员数据.xlsx')

结果:

在这里插入图片描述

利用sheet = wb.create_sheet(title=f’第{i}张表格’)这行代码, 创建excel表格

二、爬虫加单表数据保存

我们看一个案例:

我们打开nba官网, url是https://china.nba.cn/statistics/index.html

找到数据里面的球员数据.

我们需要爬取表格里面的信息, 有球员姓名, 球队, 比赛场次, 出场时间, 得分, 篮板, 助攻, 抢新, 盖帽, 投篮命中率, 三分命中数, 三分命中率, 罚球命中率这么些信息。

我们打开开发者工具, 找到数据的相应请求:

在这里插入图片描述

将请求数据的对应的url复制下来:https://api.nba.cn/sib/v2/league/playerstats?app_key=tiKB2tNdncnZFPOi&app_version=1.1.0&channel=NBA&conference=All&device_id=6d02def8348ce928cca4cfa777ee6a4e&individual=All&install_id=799163069&network=N%2FA&os_type=3&os_version=1.0.0&page_no=1&page_size=50&position=All&scope=team&season=2023&seasonType=4&sign=sign_v2&sign2=076D913573642C47DDFC1D2F2A0E4910046862A35D8D4AFC8FC05BB2B73466C0&t=1723805890324&total=perGame

代码:

import requests

url = 'https://api.nba.cn/sib/v2/league/playerstats?app_key=tiKB2tNdncnZFPOi&app_version=1.1.0&channel=NBA&conference=All&device_id=6d02def8348ce928cca4cfa777ee6a4e&individual=All&install_id=799163069&network=N%2FA&os_type=3&os_version=1.0.0&page_no=1&page_size=50&position=All&scope=team&season=2023&seasonType=4&sign=sign_v2&sign2=076D913573642C47DDFC1D2F2A0E4910046862A35D8D4AFC8FC05BB2B73466C0&t=1723805890324&total=perGame'
res = requests.get(url, headers=headers)
res_data = res.json()
#     数据解析
for i in res_data['data']['player']['Data']:
    # 姓名
    name = i['Player']['displayName']
    # 球队名
    team = i['Team']['name']
    # 比赛场次
    games = i['Games']
    # 出场时间
    minspg = i['Minspg']
    # 得分
    pointspg = i['Pointspg']
    # 篮板
    rebspg = i['Rebspg']
    # 助攻
    assistspg = i['Assistspg']
    # 抢断
    stealspg = i['Stealspg']
    # 盖帽
    offrebspg = i['Offrebspg']
    # 投篮命中率
    fgpct = f'{i["Fgpct"]}%'
    # 三分命中数
    rebs = i['Rebs']
    # 三分命中率
    tppct = f'{i["Tppct"]}%'
    # 罚球命中率
    ftpct = f'{i["Ftpct"]}%'
    print(name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct)

结果:

在这里插入图片描述

报错了, 说明在url里面有参数有误, 导致请求不成功。

唉, 我们不是把headers请求头都加了么, 怎么还是获取不到数据呢?

这里我们需要注意, 有个参数t, 这个里面的参数代表时间戳, 没有拿到正确响应的原因, 就是因为时间戳的问题, 这个就是典型的网站反爬机制, 需要把时间戳的值对上号才能获取到数据。

解决办法:

python中有个获取时间戳的库:

import time
print("获取时间戳:", int(time.time()))

那我们需要把int(time.time())传入到url里面的t参数。

修改过后的代码:

import requests
import time

url = f'https://api.nba.cn/sib/v2/league/playerstats?app_key=tiKB2tNdncnZFPOi&app_version=1.1.0&channel=NBA&conference=All&device_id=6d02def8348ce928cca4cfa777ee6a4e&individual=All&install_id=799163069&network=N%2FA&os_type=3&os_version=1.0.0&page_no=1&page_size=50&position=All&scope=team&season=2023&seasonType=4&sign=sign_v2&sign2=076D913573642C47DDFC1D2F2A0E4910046862A35D8D4AFC8FC05BB2B73466C0&t={int(time.time())}&total=perGame'
res = requests.get(url, headers=headers)
res_data = res.json()
#     数据解析
for i in res_data['data']['player']['Data']:
    # 姓名
    name = i['Player']['displayName']
    # 球队名
    team = i['Team']['name']
    # 比赛场次
    games = i['Games']
    # 出场时间
    minspg = i['Minspg']
    # 得分
    pointspg = i['Pointspg']
    # 篮板
    rebspg = i['Rebspg']
    # 助攻
    assistspg = i['Assistspg']
    # 抢断
    stealspg = i['Stealspg']
    # 盖帽
    offrebspg = i['Offrebspg']
    # 投篮命中率
    fgpct = f'{i["Fgpct"]}%'
    # 三分命中数
    rebs = i['Rebs']
    # 三分命中率
    tppct = f'{i["Tppct"]}%'
    # 罚球命中率
    ftpct = f'{i["Ftpct"]}%'
    print(name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct)

代码优化:

增加一个分页爬虫的功能并且保存数据到excel。

'''
前面几次测试可以得到正常的响应数据

突然得不到,加上了伪装

还发现分页参数有变化,时间戳变化

通过测试,更改时间戳,数据可以正常返回

验证当前拿不到正确响应的原因:时间戳的问题

'''
import time

# print(res_data)
# {'data':{'player':{'Data':[]}}}
# 创建工作表的代码
import openpyxl
import requests
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '球队数据'
# 表头
sheet.append(['姓名','球队名','比赛场次','出场时间','得分','篮板','助攻','抢断','盖帽','投篮命中率','三分命中数','三分命中率','罚球命中率'])
# 加入分页 不能确定次数,因为年份不同,总页数不一样
page = 1
headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
    }
while True:
    url = f'https://api.nba.cn/sib/v2/league/playerstats?app_key=tiKB2tNdncnZFPOi&app_version=1.1.0&channel=NBA&conference=All&device_id=6d02def8348ce928cca4cfa777ee6a4e&individual=All&install_id=799163069&network=N%2FA&os_type=3&os_version=1.0.0&page_no={page}&page_size=50&position=All&scope=team&season=2023&seasonType=4&sign=sign_v2&sign2=076D913573642C47DDFC1D2F2A0E4910046862A35D8D4AFC8FC05BB2B73466C0&t={int(time.time())}&total=perGame'
    res = requests.get(url, headers=headers)
    res_data = res.json()
    #     结束循环的代码 如果Data对应的列表为[] 代表没有数据了
    # {'Data':[{},{}]}
    # {'Data':[]}
    if len(res_data['data']['player']['Data']) == 0:
        break
    #     数据解析
    for i in res_data['data']['player']['Data']:
        # 姓名
        name = i['Player']['displayName']
        # 球队名
        team = i['Team']['name']
        # 比赛场次
        games = i['Games']
        # 出场时间
        minspg = i['Minspg']
        # 得分
        pointspg = i['Pointspg']
        # 篮板
        rebspg = i['Rebspg']
        # 助攻
        assistspg = i['Assistspg']
        # 抢断
        stealspg = i['Stealspg']
        # 盖帽
        offrebspg = i['Offrebspg']
        # 投篮命中率
        fgpct = f'{i["Fgpct"]}%'
        # 三分命中数
        rebs = i['Rebs']
        # 三分命中率
        tppct = f'{i["Tppct"]}%'
        # 罚球命中率
        ftpct = f'{i["Ftpct"]}%'
        print(name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct)
        sheet.append([name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct])
    print(f'第{page}页数据已经全部获取完毕')
    page += 1


# 保存表格
wb.save('aaa/球队数据.xlsx')

结果:

在这里插入图片描述
在这里插入图片描述

三、爬虫加多表数据保存

还是用刚才的nba球员的数据, 这次我们不仅仅实现分页爬虫加上保存数据, 我们在这里需要爬取不同年份里面的所有的nba球员所有的数据并保存, 以年份为准保存每一年的nba球员的数据。

url关键会变化的参数:

年份参数: year, 分页参数: page, 时间戳参数: t。

代码:

import time
import datetime


'''
一个年份对应一个子表
'''

import openpyxl
import requests
wb = openpyxl.Workbook()

# 加入分页 不能确定次数,因为年份不同,总页数不一样

headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
    }
year_now = datetime.datetime.now().year
for year in range(1996,year_now):
    page = 1 # 根据年份重置分页的起始
    # 创建子表要放入到年份循环的代码中
    # 因为文件是按照年份进行划分子表
    # 创建新的子表
    sheet = wb.create_sheet(title=f'{year}年球员数据')
    # 表头
    sheet.append(['姓名', '球队名', '比赛场次', '出场时间', '得分', '篮板', '助攻', '抢断', '盖帽', '投篮命中率', '三分命中数', '三分命中率', '罚球命中率'])
    while True:
        # 休眠
        time.sleep(0.5)
        url = f'https://api.nba.cn/sib/v2/league/playerstats?app_key=tiKB2tNdncnZFPOi&app_version=1.1.0&channel=NBA&conference=All&device_id=6d02def8348ce928cca4cfa777ee6a4e&individual=All&install_id=799163069&network=N%2FA&os_type=3&os_version=1.0.0&page_no={page}&page_size=50&position=All&scope=team&season={year}&seasonType=4&sign=sign_v2&sign2=076D913573642C47DDFC1D2F2A0E4910046862A35D8D4AFC8FC05BB2B73466C0&t={int(time.time())}&total=perGame'
        res = requests.get(url, headers=headers)
        res_data = res.json()
        #     结束循环的代码 如果Data对应的列表为[] 代表没有数据了
        # {'Data':[{},{}]}
        # {'Data':[]}
        if len(res_data['data']['player']['Data']) == 0:
            break
        #     数据解析
        for i in res_data['data']['player']['Data']:
            # 姓名
            name = i['Player']['displayName']
            # 球队名
            try:
                team = i['Team']['name']
            except:
                team = ''
            # 比赛场次
            games = i['Games']
            # 出场时间
            minspg = i['Minspg']
            # 得分
            pointspg = i['Pointspg']
            # 篮板
            rebspg = i['Rebspg']
            # 助攻
            assistspg = i['Assistspg']
            # 抢断
            stealspg = i['Stealspg']
            # 盖帽
            offrebspg = i['Offrebspg']
            # 投篮命中率
            fgpct = f'{i["Fgpct"]}%'
            # 三分命中数
            rebs = i['Rebs']
            # 三分命中率
            tppct = f'{i["Tppct"]}%'
            # 罚球命中率
            ftpct = f'{i["Ftpct"]}%'
            print(name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct)
            sheet.append([name,team,games,minspg,pointspg,rebspg,assistspg,stealspg,offrebspg,fgpct,rebs,tppct,ftpct])
        print(f'第{year}年的{page}页数据已经全部获取完毕')
        page += 1

# 删除第一个默认的子表
wb.remove(wb.active)
# 保存表格
wb.save('全部球员数据.xlsx')

year_now = datetime.datetime.now().year这行代码指的是获取当前的年份, 当前的年份是2024, 所以获取到的值的2024。而我们在nba网站上面看到的球员信息, 正好到2023年, 所以我们可以把这个数据放到循环里面去使用:for year in range(1996,year_now)。

运行完之后的结果:

在这里插入图片描述
在这里插入图片描述

在最下面, 有很多张表格, 分别保存着每一年的球员数据。

四、实战

我们打开网站:

在这里插入图片描述

url是https://bgm.tv/anime/browser?sort=rank

要求: 我们需要爬取动画的标题, 动画信息, 评分这三个信息, 同样需要分页查询, 将数据保存到同一张表格当中, 并将表格命名为动漫数据大全, 将excel文件命名为动漫信息, 文件以xlsx为后缀。

先不要马上看答案, 尝试自己去做一做哦。




参考答案:

import requests
from bs4 import BeautifulSoup
import openpyxl

page = 1
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
}
wb = openpyxl.Workbook()
sheet1 = wb.active
sheet1.title = "动漫数据大全"
sheet1.append(["标题", "动漫基本信息", "动漫评分"])
while True:
    url = f"https://bgm.tv/anime/browser?sort=rank&page={page}"
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, "lxml")
    section = soup.select(".section>ul>li")
    if len(section) == 0:
        break
    else:
        for item in section:
            # 标题
            title = item.select("div>h3>a")[0].text
            # 动漫基本信息
            info = item.select("div>p")[0].text.replace('\n', ' ')
            # 动漫评分
            rating = item.select("div>.rateInfo>.fade")[0].text
            print("标题:", title, "\t动漫基本信息:", info, "\t动漫评分:", rating)
            sheet1.append([title, info, rating])
    print(f"第{page}页的数据已爬完")
    page += 1
wb.save('动漫信息.xlsx')

结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这道实战题, 你写出来了吗? 如果写出来的话, 给自己鼓掌哦👏

以上就是爬虫以及数据保存的所有内容了, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件,通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项,可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…

打造充电场站:场地选择与合规运营详解

建设一座充电站需要六步流程:准备工作 → 备案 → 土地审核 → 规划审核 → 电力申请 → 验收确认 一、准备工作 在确定建设前,要考察待选的场地,例如空地、停车场等,与场地所有方签订充电站建设合作协议。根据场地和车流量等实际…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了,所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

铲屎官进!双十一宠物空气净化器买哪款,有什么推荐的吗?

害,一到换毛季,真的顶不顺!家里两只布偶疯狂掉毛,地板、衣服上这些常规的地方就不用说了,竟然连水杯旁也有浮毛的存在,被我不小心喝进去好几次,最严重的时候已经猫毛拌饭了。 我寻求了很多解决方…

jQuery:动画 节点

jQuery:动画 & 节点 定位获取位置滚动距离 动画显示隐藏淡入淡出展开收起动画队列自定义动画动画回调函数动画延迟 节点插入节点删除节点 定位 获取位置 jquery提供了两个方法,来获取元素所处的位置: // 取值 jQuery对象.offset() // …

【JVM】—深入理解ZGC回收器—背景概念回收流程

深入理解ZGC回收器—背景概念&回收流程 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 文章目录 深入…

采集QQ群成员的过程中遇到的问题

错误思路一:通过抓取windows的QQ软件来获取QQ成员 难点:通过spy获取不到节点和句柄 正确思路:通过抓取手机版本的QQ来获取QQ成员 用到的开发工具 开维控制精灵 按键精灵助手 查找节点 有自带的函数,比如cs控件类cs.id 能提取所有节点js…

基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)

目录 1. 简介 1.1 要点 1.2 背景 1.2.1 Got stuck 1.2.2 Cant be Initialized 2. Overlay 2.1 参考 Overlay 2.1.1 KV260 Base 2.1.2 Pynq-CV-OV5640 2.2 自建 Overlay 2.2.1 IIC IP 2.2.2 MIPI CSI-2 Rx 2.2.3 AXI4-S Subset 2.2.4 Demosaic 2.2.5 Pixel Pack …

非个人小程序注册材料及认证流程

一、注册材料 1、 电子邮箱A、 未被微信公众平台注册B、 未被微信开放平台注册C、 未被个人微信号绑定过,如果被绑定了需要解绑 或 使用其他邮箱(如已被占用建议找回账号登录或换邮箱注册)2、 管理员手机号码3、 管理员个人身份证&#xff08…

小程序云开发CMS新版数据模型讲解,可视化网页管理后台,内容管理对数据库进行增删改查操作,新闻小程序实战学习

一直跟着石头哥学习小程序开发的同学比较清楚cms是什么,cms就是可以进行可视化的管理云开发数据库的网页后台。有了cms我们可以很方便的管理云开发数据库。 但是云开发官方一直改版,所以现在cms功能被整合到了云开发的数据模型里,也就是现在想…

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下: #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …

第十一章 TypeScript模块和命名空间的介绍和使用

文章目录 一、模块1. 导出基础导出重新导出导出重命名 2. 导入基础导入导入重命名 3. 默认导出4. 模块化兼容exports import require()编译结果 二、命名空间1. 例子2. 命名空间3. 引入命名空间 三、模块和命名空间 一、模块 JavaScript 在 ES2015 中引入了模块的概念&#x…

【331】基于Springboot的“有光”摄影分享网站系统

“有光”摄影分享网站设计与实现 摘 要 自互联网的发展至今,其基础理论与技术都已完善,并积极参与了整个社会各个领域。它容许信息根据媒体传播,并和信息可视化工具一起为大家提供优质的服务。对于信息多头管理、差错率高、信息安全系数差、…

【GAMES101笔记速查——Lecture 18 Advanced Topics in Rendering】

目录 1 渲染前沿 1.1 有偏vs无偏 1.2 无偏光线传播方法(Unbiased light transport methods) 1.2.1 双向路径追踪(Bidirectional path tracing,BDPT) (1)双向路径追踪(BDPT)举例 1.2.2 Metr…

《等保测评新视角:安全与发展的双赢之道》

在数字化转型的浪潮中,企业面临的不仅是技术革新的挑战,更有信息安全的严峻考验。等保测评,作为国家网络安全等级保护的一项重要措施,不仅为企业的安全护航,更成为推动企业高质量发展的新引擎。本文将从全新的视角&…

中航资本:光伏股,集体涨停!千亿龙头,罕见封板!

今日早盘,A股放量走强,半日成交超越万亿元。北证50指数持续放量上攻,飙升逾8%,再创前史新高,创业板指大涨逾3%,克复2200点,上证指数站上3300点。 盘面上,BC电池、固态电池、房地产、…

迁移学习|ResNet18

一、导入库 二、设置随机种子 三、数据增强和数据加载 四、加载预训练模型 五、定义损失函数和优化器 六、学习率调度器 七、训练模型 八、可视化训练过程 九、总结 1. 常见优化器概述 1.1 随机梯度下降(SGD: Stochastic Gradient Descent) 简介&…

CentOS系统Nginx的安装部署

CentOS系统Nginx的安装部署 安装包准备 在服务器上准备好nginx的安装包 nginx安装包下载地址为:https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.1.tar.gz执行命令安装 # 第一步 cd nginx-1.26.1# 第二步 ./configure# 第三步 make# 第四步 mak…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后,如…