Python爬虫---中国大学MOOC爬取数据(文中有数据集)

1、内容简介

本文为大二在校学生所做,内容为爬取中国大学Mooc网站的课程分类数据、课程数据、评论数据。数据集大佬们需要拿走。主要是希望大佬们能指正代码问题。

2、数据集

课程评论数据集,343525条(包括评论id、评论时间、发送评论用户的id,发送评论的用户昵称,评论内容,所属课程id)

课程数据集,29196条(包括课程id、课程、课程名称、报名人数、教师名称、所属大学、开始日期、截止日期、所属课程类别id)

课程分类数据集,23条(包括课程id、课程名称、课程简介)

链接:https://pan.baidu.com/s/10m_kWEvLaom41sFvb8CQgApwd=8888
提取码:8888
–来自百度网盘超级会员V4的分享

3、代码

3.1 获取课程类别

3.1.1 全部代码
import csv
import json
import requests# 获取类别的数据# 请求url
baseurl = "https://www.icourse163.org/web/j/channelBean.listChannelCategoryDetail.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b"# 请求头
headers = {
"Accept":"*/*",
"Accept-Encoding":"gzip, deflate, br",
"Accept-Language":"zh-CN,zh;q=0.9",
"Cache-Control":"no-cache",
"Content-Length":"192",
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",
"Cookie":"NTESSTUDYSI=9ddd9641afce4905aa429bf754db5b1b; EDUWEBDEVICE=7a18a0d811e443da8466a956d9571abd; Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1714007316; __yadk_uid=lxVu0GBpcgHrjnjdBP4LXojZlFfwpS4n; WM_NI=4G7PWoEQ02m4%2BvueYIsLLEdVSrkmtq2QbnYz6oN0vU7DuVNiljn7xkLMqPibUCA0Y3KTw4e3PffcgFfwwieW1RRmO7vvCHyP7%2FfjlmJia7I03OR%2FMP0xMocc%2FWmx3lHnckU%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee91e159a5adb6b5f162b1a88aa6d15f968b9e86d83eb0bc83dae67dbc8699a6db2af0fea7c3b92af899f9b1d665878f00d3f040e9aabb86dc43b19484a6e75e91aea58ef77bf28fae8fdc72f6b182d1f55ff59cbbb7cd63b0b6a2d8fb619093bfb1ec6a979d8fd1dc39898cb9d5e83994baaa84e64ea6a9b98ae85df38e9e8ece3db6aa8da9fc5cf5f1aa8bef678ab7afd8cc3cf1919ed0d05cf4a88390e269ed89a399b2688cb2ad8cd837e2a3; WM_TID=uZLSXz1D89ZBAUAUVQKFu0YZ91x1YWRD; Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1714009886",
"Edu-Script-Token":"9ddd9641afce4905aa429bf754db5b1b",
"Origin":"https://www.icourse163.org",
"Pragma":"no-cache",
"Referer":"https://www.icourse163.org/channel/2001.htm?cate=-1&subCate=-1",
"Sec-Ch-Ua":'"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
"Sec-Ch-Ua-Mobile":"?1",
"Sec-Ch-Ua-Platform":"Android",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin",
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Mobile Safari/537.36"
}# 请求数据,固定的
data = "includeALLChannels=true&includeDefaultChannels=false&includeMyChannels=false";
# 发送请求
response = requests.post(baseurl,data=data, headers=headers,timeout=10)# 获取数据
parsed_data = json.loads(response.text)# 将数据转为utf-8模式
for key, value in parsed_data.items():if isinstance(value, str):parsed_data[key] = value.encode('utf-8').decode('unicode-escape')# 打印 类别JSON数据
print(json.dumps(parsed_data, indent=4, ensure_ascii=False))# 定义需要写入csv的字段
fields = ['id', 'name', 'shortDesc', 'weight', 'defaultChannel', 'charge', 'includeLearningProgress', 'newGiftBag', 'suportOoc', 'suportVocationalMooc', 'suportNavigationType', 'icon', 'recommendWord', 'seoKeywords', 'showChildCategory', 'childrenChannelIds', 'childrenChannelDtoList']# 创建 CSV 文件并写入数据
with open('channel_data.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)writer.writerow(fields)# 按照json数据 遍历写入数据即可for channel_category in parsed_data['result']['channelCategoryDetails']:for channel in channel_category['channels']:row = [channel[field] for field in fields]writer.writerow(row)
3.1.2 代码解释

中国大学Mooc的网站爬取很简单,几乎没有反爬手段,适合我这种初学者。

首先,是请求头数据的获取。浏览器右键打开审查模式,单击网络,找到一个请求,将其请求头数据复制下来。

请求的url我就不多说了,这个是我自己慢慢看后搜索出来的

我们可以看到,该请求方法为post,载荷,也就是携带的参数是固定的。那么简单,我们就把参数转成字符串,封装为data,一起给请求头发过去。

之后我们获取数据,并转为json格式。再把json数据转为utf-8的编码格式,防止乱码。这些数据处理就不细讲了。

然后我们根据他的json格式,遍历数据,最后输出为csv文件。

3.2 获取全部课程

3.2.1 全部代码
import csv
import json
import requests# 目的:获取每个课程的概览信息# 先创建一个csv文件,把列名写进去
with open('course_data.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)# 设置课程数据的列名fields = ['id', 'name', 'enrollCount', 'teacherName', 'schoolName', 'startTime', 'endTime']# 设置所有数据的列名(因为有些数据不在课程信息的VO类里,需要单独获取,所以另外设立)all = ['id', 'name', 'enrollCount', 'teacherName', 'schoolName', 'startTime', 'endTime','type',"channel_Id"]writer.writerow(all)# 定义获取课程类别的url
baseurl = "https://www.icourse163.org/web/j/channelBean.listChannelCategoryDetail.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b"
# 定义获取课程信息的url
twourl = "https://www.icourse163.org/web/j/mocSearchBean.searchCourseCardByChannelAndCategoryId.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b"# 请求头
headers = {
"Accept":"*/*",
"Accept-Encoding":"gzip, deflate, br",
"Accept-Language":"zh-CN,zh;q=0.9",
"Cache-Control":"no-cache",
"Content-Length":"192",
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",
"Cookie":"NTESSTUDYSI=9ddd9641afce4905aa429bf754db5b1b; EDUWEBDEVICE=7a18a0d811e443da8466a956d9571abd; Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1714007316; __yadk_uid=lxVu0GBpcgHrjnjdBP4LXojZlFfwpS4n; WM_NI=4G7PWoEQ02m4%2BvueYIsLLEdVSrkmtq2QbnYz6oN0vU7DuVNiljn7xkLMqPibUCA0Y3KTw4e3PffcgFfwwieW1RRmO7vvCHyP7%2FfjlmJia7I03OR%2FMP0xMocc%2FWmx3lHnckU%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee91e159a5adb6b5f162b1a88aa6d15f968b9e86d83eb0bc83dae67dbc8699a6db2af0fea7c3b92af899f9b1d665878f00d3f040e9aabb86dc43b19484a6e75e91aea58ef77bf28fae8fdc72f6b182d1f55ff59cbbb7cd63b0b6a2d8fb619093bfb1ec6a979d8fd1dc39898cb9d5e83994baaa84e64ea6a9b98ae85df38e9e8ece3db6aa8da9fc5cf5f1aa8bef678ab7afd8cc3cf1919ed0d05cf4a88390e269ed89a399b2688cb2ad8cd837e2a3; WM_TID=uZLSXz1D89ZBAUAUVQKFu0YZ91x1YWRD; Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1714009886",
"Edu-Script-Token":"9ddd9641afce4905aa429bf754db5b1b",
"Origin":"https://www.icourse163.org",
"Pragma":"no-cache",
"Referer":"https://www.icourse163.org/channel/2001.htm?cate=-1&subCate=-1",
"Sec-Ch-Ua":'"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
"Sec-Ch-Ua-Mobile":"?1",
"Sec-Ch-Ua-Platform":"Android",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin",
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Mobile Safari/537.36"
}# 我们先进行获取所有类别的请求
data = "includeALLChannels=true&includeDefaultChannels=false&includeMyChannels=false";
response = requests.post(baseurl,data=data, headers=headers,timeout=10)
# 接收所有类别的数据
parsed_data = json.loads(response.text)
# 转换数据为utf-8编码格式
for key, value in parsed_data.items():if isinstance(value, str):parsed_data[key] = value.encode('utf-8').decode('unicode-escape')# 遍历所有类别for channel_category in parsed_data['result']['channelCategoryDetails']:for channel in channel_category['channels']:# 当前页码pageIndex = 1# 我也不知道这个参数干啥的,根据正常请求里的数据 无脑-1就完了categoryId = -1;# 获取类别的idcategoryChannelId = channel["id"];# 进行循环,要进行 获取类别内所有课程信息 的请求while True :# 设置请求参数data = {"mocCourseQueryVo": '{categoryId:' + str(categoryId) + ',categoryChannelId:' + str(categoryChannelId) + ',''orderBy:0,stats:30,pageIndex:' + str(pageIndex) + ',pageSize:20,shouldConcatData:true}'}try:# 发送请求,因为请求头相同,不做赘述response = requests.post(twourl, data=data, headers=headers)# 当前页数+1,完成下次翻页操作pageIndex+=1# 获取该类别内课程的数据parsed_course_data = json.loads(response.text)# 转化为utf-8编码格式for key, value in parsed_data.items():if isinstance(value, str):parsed_course_data[key] = value.encode('utf-8').decode('unicode-escape')# 打印获取的 课程JSON数据print(json.dumps(parsed_course_data, indent=4, ensure_ascii=False))# 创建 CSV 文件并写入数据with open('course_data.csv', 'a', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)# 遍历类别的课程数据for item in parsed_course_data['result']['list']:# 获取课程数据course = item.get('mocCourseBaseCardVo')# 获取type数据(我也不知道干啥的)type = item.get('type')# 获取该课程所属类别的idchannelId = categoryChannelId# 在csv写入数据if course:row = [course.get(field, '') for field in fields]if type:row.append(type)if channelId:row.append(channelId)writer.writerow(row)# 如果翻页数超过或等于最大页码,退出循环if pageIndex >= parsed_course_data["result"]["query"]["totlePageCount"]:break;except Exception as e:print(f"网络异常,{e}")continue
3.2.2 代码解释

课程获取的请求URL如下图所示,我找的这个URL的过程就是,先筛选为Fetch/XHR,在点击每个链接,看他的响应。找到之后我们注意他的请求方式和url即可。

之后我们看他的载荷,也就是请求数据。我们可以看到,是一个请求头。包括类别id,页码,页数等,一个很常规的查询请求参数。我们只需把请求体封装为字符形式即可。

我们在3.1 获取课程类别的基础上,遍历课程类别数据,之后通过类别id,搜索对应课程数据。之后根据课程数据的json格式,依次遍历数据即可,除此之外,我们还可以额外加一个课程类别id的列,便于更好管理。

3.3 获取评论

3.3.1 全部代码
# 获取课程大纲
# dagangurl = 'https://www.icourse163.org/web/j/courseBean.getMocTermDto.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b'import csv
import json
import requests# 目的:获取每个课程的评论# 先创建一个csv文件,把列名写进去
with open('course_comment_data.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)# 设置课程数据的列名fields = ['id',"gmtModified","commentorId", 'userNickName', 'content', 'mark', 'schoolName', 'termId', 'status']# 设置所有数据的列名(因为有些数据不在课程信息的VO类里,需要单独获取,所以另外设立)all = ['id',"gmtModified","commentorId", 'userNickName', 'content', 'mark', 'schoolName', 'termId', 'status','courseId']writer.writerow(all)# 定义获取课程类别的url
baseurl = "https://www.icourse163.org/web/j/channelBean.listChannelCategoryDetail.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b"
# 定义获取课程信息的url
twourl = "https://www.icourse163.org/web/j/mocSearchBean.searchCourseCardByChannelAndCategoryId.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b"
# 获取课程评论信息的url
commentUrl = 'https://www.icourse163.org/web/j/mocCourseV2RpcBean.getCourseEvaluatePaginationByCourseIdOrTermId.rpc?csrfKey=9ddd9641afce4905aa429bf754db5b1b'# 请求头
headers = {"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Accept-Language":"zh-CN,zh;q=0.9","Cache-Control":"no-cache","Content-Length":"192","Content-Type":"application/x-www-form-urlencoded;charset=UTF-8","Cookie":"NTESSTUDYSI=9ddd9641afce4905aa429bf754db5b1b; EDUWEBDEVICE=7a18a0d811e443da8466a956d9571abd; Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1714007316; __yadk_uid=lxVu0GBpcgHrjnjdBP4LXojZlFfwpS4n; WM_NI=4G7PWoEQ02m4%2BvueYIsLLEdVSrkmtq2QbnYz6oN0vU7DuVNiljn7xkLMqPibUCA0Y3KTw4e3PffcgFfwwieW1RRmO7vvCHyP7%2FfjlmJia7I03OR%2FMP0xMocc%2FWmx3lHnckU%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee91e159a5adb6b5f162b1a88aa6d15f968b9e86d83eb0bc83dae67dbc8699a6db2af0fea7c3b92af899f9b1d665878f00d3f040e9aabb86dc43b19484a6e75e91aea58ef77bf28fae8fdc72f6b182d1f55ff59cbbb7cd63b0b6a2d8fb619093bfb1ec6a979d8fd1dc39898cb9d5e83994baaa84e64ea6a9b98ae85df38e9e8ece3db6aa8da9fc5cf5f1aa8bef678ab7afd8cc3cf1919ed0d05cf4a88390e269ed89a399b2688cb2ad8cd837e2a3; WM_TID=uZLSXz1D89ZBAUAUVQKFu0YZ91x1YWRD; Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1714009886","Edu-Script-Token":"9ddd9641afce4905aa429bf754db5b1b","Origin":"https://www.icourse163.org","Pragma":"no-cache","Referer":"https://www.icourse163.org/channel/2001.htm?cate=-1&subCate=-1","Sec-Ch-Ua":'"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',"Sec-Ch-Ua-Mobile":"?1","Sec-Ch-Ua-Platform":"Android","Sec-Fetch-Dest":"empty","Sec-Fetch-Mode":"cors","Sec-Fetch-Site":"same-origin","User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Mobile Safari/537.36"
}# 我们先进行获取所有类别的请求
# 请求数据,固定的
data = "includeALLChannels=true&includeDefaultChannels=false&includeMyChannels=false";
# 发送请求
response = requests.post(baseurl,data=data, headers=headers,timeout=10)
# 接收所有类别的数据
parsed_data = json.loads(response.text)
# 转换数据为utf-8编码格式
for key, value in parsed_data.items():if isinstance(value, str):parsed_data[key] = value.encode('utf-8').decode('unicode-escape')# 遍历所有类别for channel_category in parsed_data['result']['channelCategoryDetails']:for channel in channel_category['channels']:# 当前页码pageIndex = 1# 我也不知道这个参数干啥的,根据正常请求里的数据 无脑-1就完了categoryId = -1;# 获取类别的idcategoryChannelId = channel["id"];# 进行循环,要进行 获取类别内所有课程信息 的请求while True :# 设置请求参数data = {"mocCourseQueryVo": '{categoryId:' + str(categoryId) + ',categoryChannelId:' + str(categoryChannelId) + ',''orderBy:0,stats:30,pageIndex:' + str(pageIndex) + ',pageSize:20,shouldConcatData:true}'}try:# 发送请求,因为请求头相同,不做赘述response = requests.post(twourl, data=data, headers=headers)# 当前页数+1,完成下次翻页操作pageIndex+=1# 获取该类别内课程的数据parsed_course_data = json.loads(response.text)# 转化为utf-8编码格式for key, value in parsed_data.items():if isinstance(value, str):parsed_course_data[key] = value.encode('utf-8').decode('unicode-escape')# 遍历类别的课程数据for item in parsed_course_data['result']['list']:# 设置获取评论请求的数据(获取课程id、当前页码)courseId = item.get('mocCourseBaseCardVo').get("id")commentPageIndex = 1;# 根据id获取对应课程评论while True :commentData = {'courseId': str(courseId),'pageIndex': str(commentPageIndex),'pageSize': str(20),'orderBy': str(3)}response = requests.post(commentUrl, data=commentData, headers=headers, timeout=10)commentResultData = json.loads(response.text)commentPageIndex += 1# 打印获取的 课程JSON数据print(json.dumps(commentResultData, indent=4, ensure_ascii=False))# 创建 CSV 文件并写入数据with open('course_comment_data.csv', 'a', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)# 遍历类别的课程数据for item in commentResultData['result']['list']:# 在csv写入数据if item:row = [item.get(field, '') for field in fields]row.append(courseId)writer.writerow(row)# 如果 课程评论数据 翻页数超过或等于最大页码,退出循环if commentPageIndex >= commentResultData["result"]["query"]["totlePageCount"]:break;# 如果课程数据翻页数超过或等于最大页码,退出循环if pageIndex >= parsed_course_data["result"]["query"]["totlePageCount"]:break;except Exception as e:print(f"网络异常,{e}")break;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 安装

一、Tomcat 下载 官网:Apache Tomcat - Welcome! 1.1.下载安装包 下载安装包: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz 安装 javajdk。 yum install java-1.8.0-openjdk.x86_64 -y /etc/altern…

MC34063数据手册解读:功能、应用与设计指南

MC34063A/MC33063A 系列是摩托罗拉(现 NXP)推出的高集成度 DC-DC 转换器控制电路,适用于降压、升压和反相应用。本文将基于官方数据手册,对其核心功能、关键参数、典型应用及设计要点进行详细解读。 一、核心功能与特性 集成度高…

基于SpringBoot实现旅游酒店平台功能十一

一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…

Linux入门 全面整理终端 Bash、Vim 基础命令速记

Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵?于是乎,这份手册就是为你准备的高效学习指南!我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式,让你快速学…

基于deepseek的图像生成系统

目录 问题 核心思路 pollinations 提示词 基于deepseek的图像生成系统 项目说明 详细说明 1. 注册流程 2. 登录流程 3. 图片生成流程 4. 图片下载流程 项目结构 代码实现 1. 配置文件 config.py 2. 数据库模型 models.py 3. 解决循环引用 exts.py 4. 登录和…

mac安装mysql之后报错zsh: command not found: mysql !

在Mac上安装MySQL后,如果终端中找不到mysql命令,通常是 因为MySQL的命令行工具(如mysql客户端)没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…

骨质健康护理笔记

1. 阅读资料 《骨质疏松症不是“老年病”!除了补钙、晒太阳,专家还推荐… —— 健康湖北》

CSS3 用户界面设计指南

CSS3 用户界面设计指南 引言 随着互联网的快速发展,用户界面设计已经成为网站和应用程序吸引和留住用户的关键因素之一。CSS3,作为Web开发中的核心技术之一,提供了丰富的工具和特性来改善用户界面。本文将深入探讨CSS3在用户界面设计中的应用,包括基本概念、常用技巧以及…

Mybatis3 调用存储过程

1. 数据库MySQL,user表 CREATE TABLE user (USER_ID int NOT NULL AUTO_INCREMENT,USER_NAME varchar(100) NOT NULL COMMENT 用户姓名,AGE int NOT NULL COMMENT 年龄,CREATED_TIME datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,CREATED_BY varchar(100) NOT NUL…

Uniapp组件 Textarea 字数统计和限制

Uniapp Textarea 字数统计和限制 在 Uniapp 中,可以通过监听 textarea 的 input 事件来实现字数统计功能。以下是一个简单的示例,展示如何在 textarea 的右下角显示输入的字符数。 示例代码 首先,在模板中定义一个 textarea 元素&#xff…

STM32 HAL库实战:轻松实现串口通信驱动蓝牙模块与ESP8266开发

STM32 HAL库实战:轻松实现串口通信驱动蓝牙模块与ESP8266开发 引言 STM32F103C8T6作为一款性能强劲的32位微控制器,广泛应用于各类嵌入式系统。本文将详细介绍如何使用STM32F103C8T6的HAL库进行串口通信,并展示如何通过串口驱动蓝牙模块&…

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…

python-leetcode-最大连续1的个数 III

1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 使用滑动窗口的方法来解决这个问题。 思路&#xff1a; 使用双指针&#xff08;滑动窗口&#xff09;&#xff0c;定义左右边界 left 和 right。维护窗口内最多包含 k 个 0。当窗口内的 0 超过 k 个时&…

Linux中grep、sed和awk常见用法总结

1.概述 Linux系统下&#xff0c;grep、sed和awk三个命令是最常用的、非常强大的文本处理工具&#xff0c;可以用于搜索、替换、过滤、排序等多种操作&#xff0c;掌握这三种工具的用法&#xff0c;可以大大提高我们在Linux下处理文本的效率。 2.grep命令 grep是一种非常常见…

基于Vue3的流程图绘制库

流程图组件的革命者&#xff0c;带你探索无限可能Vue Flow 基于Vue3的流程图绘制库

学习springboot-Bean管理(Bean 注册,Bean 扫描)

Bean 扫描 可以浏览下面的博客链接 &#xff1a;spring 学习 &#xff08;注解&#xff09;-CSDN博客 在学习spring 注解时&#xff0c;我们使用 Component &#xff0c;Service,Controller等 这样的注解&#xff0c;将目标类信息&#xff0c;传递给IOC容器&#xff0c;为其创…

spring中将yaml文件转换为Properties

文章目录 一 &#xff0c;概述二&#xff0c;源码 一 &#xff0c;概述 借助于spring框架&#xff0c;将yaml文件转换为Properties 二&#xff0c;源码 import java.util.Properties;import org.junit.Test; import org.springframework.beans.factory.config.YamlPropertie…

c++ 中的float和double 的区别 开发过程中使用哪个更好

在 C 中&#xff0c;float 和 double 都是用于表示浮点数的数据类型&#xff0c;但它们在精度、存储空间和性能方面有所不同。 1. float 和 double 的主要区别 特性floatdouble占用内存4 字节&#xff08;32 位&#xff09;8 字节&#xff08;64 位&#xff09;精度约 6-7 位有…

OpenAI智能体初探:使用 OpenAI Responses API 在 PDF 中实现检索增强生成(RAG)

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 引子 在信息爆炸的时代,从大量 PDF 文档中快速准确地检索信息…

【MySQL】基本操作 —— DDL

目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…