Ajax数据采集与分析详解
文章目录
- 1. 什么是 Ajax?
- 2. Ajax 的工作原理
- 3. Ajax 在网页中的应用场景
- 4. 爬取 Ajax 数据的方法
- 4.1 分析网络请求
- 4.2 模拟 Ajax 请求
- 4.3 使用 Selenium 模拟浏览器
- 4.4 使用 Headless 浏览器
- 5. 处理动态参数
- 6. 处理分页和滚动加载
- 7. 处理反爬虫机制
- 8. 数据存储
- 9. 实战案例
- 10. 反爬机制与应对策略
- 10.1 常见的反爬机制
- 10.2 应对反爬的策略
- 11. 总结
1. 什么是 Ajax?
Ajax(Asynchronous JavaScript and XML)
是一种用于创建快速动态网页的技术。它允许网页在不重新加载整个页面的情况下,与服务器进行异步通信,更新部分网页内容。Ajax 通常用于提升用户体验,使网页更加动态和响应迅速。这意味着可以在不打断用户操作的情况下,实时获取和更新数据,大大提高了用户体验。
2. Ajax 的工作原理
Ajax 通过 JavaScript 发送 HTTP 请求到服务器,并在不重新加载整个页面的情况下,接收和处理服务器返回的数据。这个过程是异步的,意味着用户可以在数据加载的同时继续与页面交互。
XMLHttpRequest 对象:Ajax 的核心是 XMLHttpRequest 对象(XHR),它用于在后台与服务器交换数据。其工作原理如下:
- 创建 XHR 对象:在 JavaScript 中,通过
new XMLHttpRequest()
创建一个 XHR 对象实例。 - 配置请求:设置请求的方法(如 GET、POST 等)、URL 以及是否异步等参数。
- 发送请求:调用 XHR 对象的
send()
方法发送请求。如果是 POST 请求,还需要在send()
方法中传入请求数据。 - 处理响应:XHR 对象的
onreadystatechange
事件会在请求状态发生变化时触发。当readyState
为 4(表示请求已完成)且status为 200(表示请求成功)时,可以通过responseText
或responseXML
属性获取服务器返回的数据,并进行相应的处理,如更新页面内容。
Fetch API:现代浏览器提供了 Fetch API,它是 XMLHttpRequest 的替代品,提供了更强大和灵活的功能。
3. Ajax 在网页中的应用场景
1、搜索框实时提示:当用户在搜索框中输入内容时,通过 Ajax 实时向服务器发送请求,获取相关的搜索建议并显示在下拉框中。
2、表单验证:在用户提交表单前,通过 Ajax 将表单数据发送到服务器进行验证,实时反馈验证结果,避免用户提交无效数据。
3、动态加载内容:如社交媒体网站的动态加载更多内容,当用户滚动到页面底部时,通过 Ajax 请求加载更多的动态数据,无需重新加载整个页面。
4. 爬取 Ajax 数据的方法
由于 Ajax 数据是动态加载的,传统的网页爬虫(如基于 requests 库的爬虫)无法直接获取这些数据。Ajax 数据通常是通过 JavaScript 动态生成的,因此需要分析找出 Ajax 请求或者模拟浏览器行为来获取这些数据。
4.1 分析网络请求
使用浏览器开发者工具:打开浏览器的开发者工具(通常按 F12),切换到“Network”选项卡,查看页面加载时发送的 HTTP 请求。找到包含所需数据的 Ajax 请求。
过滤 XHR 请求:在“Network”选项卡中,过滤出 XHR(XMLHttpRequest)请求,这些请求通常是 Ajax 请求。
Ajax 请求的关键信息如下:
- 请求 URL:确定 Ajax 请求的目标地址,这是发送请求的关键。有些网站的 Ajax 请求 URL 可能会包含参数,这些参数可能与请求的数据、用户身份等相关,需要仔细分析。
- 请求方法:常见的请求方法有 GET 和 POST。GET 方法将请求参数附加在 URL 后面,适用于获取数据;POST 方法将请求参数放在请求体中,适用于提交数据。不同的请求方法在爬取时的处理方式可能略有不同。
- 请求头(Headers):包含了关于请求的一些附加信息,如User - Agent(用于标识浏览器类型和版本)、Referer(表示请求的来源页面)、Cookie(用于身份验证和会话管理)等。有些网站会根据请求头中的信息来判断请求是否合法,因此在爬取时需要正确设置请求头。
- 响应数据格式:常见的响应数据格式有 JSON、XML 和 HTML 片段等。JSON 格式由于其简洁性和易于解析的特点,被广泛应用于 Ajax 数据传输。了解响应数据格式,有助于在爬取时正确解析数据。
识别 Ajax 请求的特征:
- 页面无刷新更新:当操作页面(如点击按钮、滚动页面等)时,页面部分内容发生变化,但整个页面没有重新加载,很可能是通过 Ajax 实现的。
- 请求 URL 的特点:有些 Ajax 请求的 URL 可能包含特定的关键字,如ajax、json等,或者 URL 的后缀不是常见的 HTML、CSS、JS 等文件类型。
- XHR 请求标识:在 Network 面板中,请求类型为XHR(XMLHttpRequest)的请求通常就是 Ajax 请求。
4.2 模拟 Ajax 请求
复制请求:在开发者工具中,找到目标 Ajax 请求,右键点击并选择“Copy as cURL”或“Copy as Fetch”,然后将其转换为 Python 代码。
使用 requests 库:将复制的请求转换为 requests 库的代码,发送请求并获取数据。
import requestsurl = "https://example.com/api/data"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","X-Requested-With": "XMLHttpRequest"
}
params = {"param1": "value1","param2": "value2"
}response = requests.get(url, headers=headers, params=params)
data = response.json()
print(data)
4.3 使用 Selenium 模拟浏览器
安装 Selenium:Selenium 是一个自动化测试工具,可以模拟浏览器行为。
加载页面并等待 Ajax 数据:使用 Selenium 加载页面,并等待 Ajax 数据加载完成。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.get("https://example.com")# 等待 Ajax 数据加载
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "ajax-data"))
)# 获取数据
data = driver.find_element(By.ID, "ajax-data").text
print(data)driver.quit()
4.4 使用 Headless 浏览器
Headless 模式:Selenium 支持无头模式,可以在后台运行浏览器,不显示界面。
提高效率:无头模式可以提高爬取效率,减少资源消耗。
from selenium.webdriver.chrome.options import Optionschrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)
5. 处理动态参数
Ajax 请求通常包含动态参数,如时间戳、Token 等。这些参数可能通过 JavaScript 生成,爬取时需要动态获取。
解析 JavaScript:使用 execjs 或 PyExecJS 库执行 JavaScript 代码,生成动态参数。
逆向工程:分析 JavaScript 代码,理解参数生成逻辑,并在 Python 中实现。
import execjs# 假设 JavaScript 代码生成一个动态参数
js_code = """
function generateParam() {return Math.random().toString(36).substring(2);
}
"""
context = execjs.compile(js_code)
dynamic_param = context.call("generateParam")
print(dynamic_param)
6. 处理分页和滚动加载
Ajax 数据通常通过分页或滚动加载的方式加载更多内容。爬取时需要模拟这些行为。
分页:分析分页请求的 URL 或参数,循环发送请求获取所有页面的数据。
滚动加载:使用 Selenium 模拟滚动操作,触发 Ajax 请求加载更多数据。
# 模拟滚动加载
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "new-data"))
)
7. 处理反爬虫机制
许多网站会设置反爬虫机制,如 IP 封禁、验证码、User-Agent 检测等。爬取时需要采取相应措施。
使用代理 IP:通过代理 IP 池轮换 IP,避免被封禁。
设置随机 User-Agent:每次请求时随机更换 User-Agent,模拟不同浏览器。
处理验证码:使用 OCR 技术或第三方服务识别验证码。
import randomuser_agents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
]headers = {"User-Agent": random.choice(user_agents)
}
8. 数据存储
爬取到的数据可以存储到文件或数据库中,便于后续分析和使用。
存储到文件:使用 json、csv 等格式存储数据。
存储到数据库:使用 SQLite、MySQL、MongoDB 等数据库存储数据。
import jsonwith open("data.json", "w") as f:json.dump(data, f)
9. 实战案例
假设我们要爬取一个使用 Ajax 加载的新闻网站,获取所有新闻标题和链接。
import requests
from bs4 import BeautifulSoupurl = "https://example.com/api/news"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}response = requests.get(url, headers=headers)
data = response.json()for item in data["news"]:title = item["title"]link = item["link"]print(f"Title: {title}, Link: {link}")
10. 反爬机制与应对策略
10.1 常见的反爬机制
IP 限制:网站通过检测请求的 IP 地址,限制同一 IP 在短时间内的请求次数。如果超过限制,会返回错误信息或封禁 IP。
User - Agent 检测:网站会检查请求头中的User - Agent字段,判断请求是否来自真实的浏览器。如果User - Agent不符合常见浏览器的特征,可能会被拒绝。
验证码:在用户请求次数过多或行为异常时,网站会要求用户输入验证码进行验证,以区分是正常用户还是爬虫程序。
动态页面渲染:使用 JavaScript 动态生成页面内容,使得传统的爬虫无法直接获取到数据,需要通过模拟浏览器执行 JavaScript 代码来渲染页面。
10.2 应对反爬的策略
IP 代理池:使用多个代理 IP,轮流发送请求,避免单个 IP 被频繁限制。可以从公开的代理 IP 网站获取免
费代理 IP,也可以购买高质量的代理 IP 服务。
随机 User - Agent:在每次请求时,随机选择一个常见的浏览器User - Agent,伪装成真实的浏览器请求。可以使用fake_useragent库来实现随机User - Agent的生成。
验证码识别:对于简单的验证码,可以使用第三方的验证码识别服务,如打码平台。对于复杂的验证码,可能需要结合机器学习等技术进行识别。
模拟浏览器:使用Selenium等工具,模拟浏览器的行为,包括加载页面、执行 JavaScript 代码等,以获取动态生成的数据。
11. 总结
Ajax 数据爬取是爬虫开发中的一个重要课题,涉及网络请求分析、动态参数处理、反爬虫机制应对等多个方面。通过掌握这些知识点,可以有效地爬取动态加载的数据,为数据分析和应用提供支持。以上是 Ajax 数据爬取的详细知识点解析,涵盖了从基础概念到实战应用的各个方面。
相关文章:
Ajax数据采集与分析详解
文章目录 1. 什么是 Ajax?2. Ajax 的工作原理3. Ajax 在网页中的应用场景4. 爬取 Ajax 数据的方法4.1 分析网络请求4.2 模拟 Ajax 请求4.3 使用 Selenium 模拟浏览器4.4 使用 Headless 浏览器 5. 处理动态参数6. 处理分页和滚动加载7. 处理反爬虫机制8. 数据存储9. …...
协方差(Covariance)与得分函数:从Fisher信息矩阵看统计关联
协方差与得分函数:从Fisher信息矩阵看统计关联 协方差(Covariance)是统计学中一个基础但强大的概念,它描述了两个随机变量之间的关系。在Fisher信息矩阵中,协方差以一种特别的形式出现:得分函数的协方差。…...
【CSS 选择器的特异度 CSS 继承 CSS 求值过程解析 CSS 布局方式及相关技术】
以下是关于 CSS 选择器特异度、继承、求值过程及布局技术 的详细解析,结合核心概念和实际应用场景: 一、CSS 选择器特异度(Specificity) 1. 特异度规则 特异度用于决定当多个选择器作用于同一元素时,哪个样式优先级更…...
Vue+ElementPlus的一些问题修复汇总
目录 一、ElementPlusVue-router做侧边栏问题 二、 组件样式问题 2.1修改文字颜色、大小、粗细、边框的颜色 2.2修改聚焦后文字的颜色、边框的颜色 2.3修改鼠标悬浮时文字的颜色、边框的颜色 三、 组件样式问题 3.1修改文字颜色、大小、粗细 四、 样式问题 4.1当数据为空…...
单链表删除算法(p=L; j=0;与p=p->next;j=1的辨析)
算法描述 Status ListDelete(LinkList &L,int i) { //在带头结点的单链表 L 中,删除第 i 个元素 pL; j0; while ((p->next) && (j<i-1)) {pp->next; j;} if (!(p->next)||(j>i-1)) return ERROR; qp->nex…...
从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯
目录 前言 HAL库对GPIO的抽象 核心分析:HAL_GPIO_Init 前言 我们终于到达了熟悉的地方,对GPIO的初始化。经过漫长的铺垫,我们终于历经千辛万苦,来到了这里。关于GPIO的八种模式等更加详细的细节,由于只是点个灯&am…...
vue2项目打包后js文件过大, 首次加载缓慢
vue2项目打包后js文件过大, 首次加载缓慢 安装插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…...
llama.cpp 一键运行本地大模型 - Windows
文章目录 llama.cpp 一键运行本地大模型 - Windows嘿,咱来唠唠 llama.cpp 这玩意儿!gguf 格式是啥?咱得好好说道说道基座模型咋选?所需物料,咱得准备齐全咯核心命令,得记牢啦运行方式咋选?测试应…...
Android 老项目 jcenter 库失效
最近重新维护了一些老项目发现大部分jcenter库失效了, Could not resolve com.xx:2.1.3. 如果你也遇到了,不妨试试 替换为 aliyun的jcenter服务,就不用一个个找代替库了。 project 下的 build.gradle 文件添加: maven { url htt…...
MyBatis简明教程
MyBatis 是一个用于简化数据库操作的持久层框架,它的核心思想是 将 SQL 与 Java 代码解耦,让开发者专注于 SQL 的编写,同时自动处理重复的数据库操作步骤。 一、核心思想:SQL 与 Java 解耦 传统 JDBC 需要开发者手动管理数据库连…...
【Golang 面试题】每日 3 题(六十八)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
DeepSeek个人知识库
deepseek构建个人知识库 安装软件链接 : 安装链接 先在本地把deepseek跑起来,本地部署deepseek见前文链接: 本地部署ollama # 目前软件只支持1.5b小模型,将就着用 ollama run deepseek-r1:1.5b等服务器启动后开启软件 上传文件 输入消息 (…...
力扣练习之字符串的最大公因子
使用语言:c 题目: 对于字符串 s 和 t,只有在 s t t t ... t t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能…...
姿态矩阵/旋转矩阵/反对称阵
物理意义,端点矢量角速率叉乘本身向量; 负号是动系b看固定系i是相反的; 一个固定 在惯性导航解算中,旋转矢量的叉乘用于描述姿态矩阵的微分方程。你提到的公式中, ω i b b \boldsymbol{\omega}_{ib}^b \times ωibb…...
项目一 - 任务3:搭建Java集成开发环境IntelliJ IDEA
通过本次实战,我们成功搭建了Java集成开发环境IntelliJ IDEA,并完成了多个任务。首先,安装了IntelliJ IDEA并进行了个性化设置,如选择主题、调整字体和编码等。接着,创建了Java项目、包和类,编写并运行了简…...
C++的类型转换
目录 一、隐式类型转换的触发场景 1.基本数据类型间的转换 i.提升转换 ii.截断转换 2.类与对象的转换 i.单参数构造函数 ii.类型转换运算符 3.继承体系中的指针/引用转换 向上转型 二、隐式转换的风险与问题 1.意外行为 2.二义性错误 3.性能损耗 三、C强制类型转…...
嵌入式项目:STM32刷卡指纹智能门禁系统
本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助,请点链接: https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端(下位机)…...
DeepSeek基础之机器学习
文章目录 一、核心概念总结(一)机器学习基本定义(二)基本术语(三)假设空间(四)归纳偏好(五)“没有免费的午餐”定理(NFL 定理) 二、重…...
Docker 搭建 Nginx 服务器
系列文章目录 Docker 搭建 Nginx 服务器 系列文章目录前言一、准备工作二、设置 Nginx 容器的目录结构三、启动一个临时的 Nginx 容器来复制配置文件四、复制 Nginx 配置文件到本地目录五、删除临时 Nginx 容器六、创建并运行 Nginx 容器,挂载本地目录七、修改 ngin…...
【Docker基础】理解 Docker:本质、性质、架构与核心组件
文章目录 Docker 本质Docker 的引擎迭代Docker 和虚拟机的区别Docker 为什么比虚拟机资源利用率高,速度快?Docker 和 JVM 虚拟化的区别Docker 版本1. LXC (Linux Containers)2. libcontainer3. Moby4. docker-ce5. docker-ee总结: Docker 架构…...
QT:QLinearGradient、QRadialGradient、QConicalGradient
QLinearGradient QLinearGradient 是 Qt 框架中用于创建线性渐变的类,它允许在图形绘制中实现颜色沿着一条直线的平滑过渡效果。以下是关于 QLinearGradient 的详细介绍: 基本概念:线性渐变是指颜色从一个点(起始点)沿…...
MySql:Authentication plugin ‘caching sha2 password‘ cannot be loaded
报错问题解释 在 MySQL 数据库中,如果你尝试使用 caching_sha2_password 插件进行认证,但是遇到错误信息 "Authentication plugin caching sha2 password cannot be loaded",这通常意味着客户端库或者连接器不兼容或者没有正确配置…...
c++类知识点复习与总结
类 c 是一种人机交互的面向对象的编程语言,面向对象思想主要体现在 类 上。 类是具有相同属性和相同行为的对象的集合, 具有封装,继承,多态的特性。 类的定义 class 类名 { }; 封装 例如:人就是一种类…...
Redis快速入门
一、Redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings),散列(has…...
嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT
目录 1. MATLAB获取 STM32 的原始数据 2. 将数据上传到电脑 3. MATLAB 接收数据并验证 STM32进行傅里叶代码 结果分析 STM32 和 MATLAB 联调是嵌入式开发中常见的工作流程,通常目的是将 STM32 采集的数据或控制信号传输到 MATLAB 中进行实时处理、分析和可视化…...
LLM/VLM进行票据识别工作
票据识别任务的需求是给定不同类型的票据图像,提取出指定的字段值,以json格式给出结构化信息。 目前的范式包括OCR,OCRLLM, OCRVLM,VLM四种方法。 一、OCR 利用OCR技术进行图像文字识别。 例如:https://github.c…...
AWS SDK for Java 1.x 403问题解决方法和原因
问题表现 使用AWS SDK for Java 1.x访问S3,已经确认文件存在,且具有权限,仍然出现403 Forbidden应答。 解决方法 升级到AWS SDK for Java 2.x。 问题原因 AWS签名机制严格依赖请求的精确路径格式,任何URI的差异(如…...
Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理的使用
在 Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理都是实现 AOP (面向切面编程) 的重要技术。 它们的主要区别在于代理对象的生成方式和适用范围。 下面详细介绍它们的使用场景: 1. JDK 动态代理 (JDK Dynamic Proxy) 原理: JDK 动态代理…...
蓝桥杯备赛-精卫填海-DP
精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗? 事实上,东海未填平的区域还需要至少体积为 v 的木石才可以填平,而西山上的木石还剩下 n 块,每块…...
萌新学 Python 之闭包函数
闭包函数:在一个函数体内嵌套函数,是一个函数对象,允许在内部函数中修改或引用外部函数的变量 闭包函数对数据有封存功能 闭包函数需要满足以下几个条件: 1.函数必须有一个嵌套函数,在定义函数时,内部再…...
AI创作教程:用deepseek和猫箱做互动故事游戏
年轻的时候我看过典型的玛丽苏文学、小妞文学,老了虽然识破这是给女孩编织的琉璃般的梦,看起来梦幻美丽其实一击就碎,会伤人的碎渣渣。【叠甲完毕】 本来我想用橙光的,但是橙光的话,最好把剧本和立绘都多打磨一下。快…...
【Linux探索学习】第三十一弹——线程互斥与同步(下):深入理解确保线程安全的机制
线程互斥与同步(上):【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制-CSDN博客 Linux探索学习: https://blog.csdn.net/2301_80220607/category_12805278.html?…...
博客系统完整开发流程
前言 通过前⾯课程的学习, 我们掌握了Spring框架和MyBatis的基本使用, 并完成了图书管理系统的常规功能开发, 接下来我们系统的从0到1完成⼀个项⽬的开发. 企业开发的流程 1. 需求评审(产品经理(PM)会和运营(想口号),UI,测试,开发等沟通) ,会涉及到背景/目标/怎么做,可能会有多…...
【C++】面试常问八股
5、内存管理 野指针 野指针指的是未进行初始化或未清零的指针,不是NULL指针野指针产生原因及解决方案: 指针变量未初始化:指针变量定义时若未初始化,则其指向的地址是随机的,不为NULL;定义时初始化为NULL…...
自定义提交按钮触发avue-form绑定的submit事件
场景 使用avue-form时,提交按钮会绑定至form区域下方,如果想自定义按钮位置,需要通过dialog的footer位置进行编写,例如: <avue-form ref"form" v-model"dataInfo" :option"dataInfoOpti…...
HarmonyOS 无线调试
下载sdk 找到hdc位置> C:\Users\27638\AppData\Local\OpenHarmony\Sdk\14\toolchains 不要去DevEco Studio的窗口不知道为什么调不动 hdc tconn IP:PORT...
Android之APP更新(通过接口更新)
文章目录 前言一、效果图二、实现步骤1.AndroidManifest权限申请2.activity实现3.有版本更新弹框UpdateappUtilDialog4.下载弹框DownloadAppUtils5.弹框背景图 总结 前言 对于做Android的朋友来说,APP更新功能再常见不过了,因为平台更新审核时间较长&am…...
二、大模型微调技术栈全解析
大模型微调技术栈全解析:从微调方法到算力支撑 在大模型的领域中,微调(Fine-tuning)就像是为模型量身定制的高级裁缝服务,能够让通用的大模型更好地适应特定的任务和场景。而要完成这项精细的工作,需要一整…...
设置 C++ 开发环境
设置 C++ 开发环境 C++ 是一种通用编程语言,现在广泛用于竞争性编程。它具有命令式、面向对象的和通用编程功能。 C++ 可以在许多平台上运行,如 Windows、Linux、Unix、Mac 等。在我们开始使用 C++ 编程之前。我们需要在本地计算机上设置一个环境,以便成功编译和运行我们的…...
计算机基础知识
1、RAM和ROM RAM:随机存取存储器,也叫做主存。是与CPU直接交换数据的内部存储器。这种存储器在断电时将丢失其数据,故主要用于短时间使用的程序。 ROM:即只读存储,是一种只能读出事先所存数据的固态半导体存储器 2、…...
蓝桥杯——按键
一:按键得原理图 二:按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断…...
Zemax OpticStudio 中的扩散器建模
在 Zemax OpticStudio 中构建漫射器涉及创建散射或漫射光的表面或物体。以下是有关如何在 Zemax OpticStudio 中创建漫射器的一般指南: 转到非序列模式 (NSC) 选项卡。NSC 对于模拟与物体而非表面相互作用的非序列射线很有用。 在需要散光器的位置创建新对象。对象…...
网络安全防御:蓝队重保备战与应急溯源深度解析
课程目标 本课程旨在培养专业的网络安全蓝队成员,通过系统化的学习和实战演练,使学员能够掌握网络安全防御的核心技能,包括资产测绘、应急响应、系统安全应急溯源分析、网络层溯源分析以及综合攻防演练等。学员将能够熟练运用各种工具和技术…...
MySQL 和 Elasticsearch 之间的数据同步
MySQL 和 Elasticsearch 之间的数据同步是常见的需求,通常用于将结构化数据从关系型数据库同步到 Elasticsearch 以实现高效的全文搜索、聚合分析和实时查询。以下是几种常用的同步方案及其实现方法: 1. 应用层双写(双写模式) 原…...
【深度学习】矩阵的核心问题解析
一、基础问题 1. 如何实现两个矩阵的乘法? 问题描述:给定两个矩阵 A A A和 B B B,编写代码实现矩阵乘法。 解法: 使用三重循环实现标准矩阵乘法。 或者使用 NumPy 的 dot 方法进行高效计算。 def matrix_multiply(A, B):m, n …...
汽车开放系统架构(AUTOSAR)中运行时环境(RTE)生成过程剖析
一、引言 在当今高度智能化的汽车电子领域,软件系统的复杂性呈指数级增长。为了应对这一挑战,汽车开放系统架构(AUTOSAR)应运而生,它为汽车电子软件开发提供了标准化的分层架构和开发方法。其中,运行时环境…...
VC++零基础入门之系列教程 【附录E MFC快速参考指南】
附录E MFC快速参考指南 E.1 创建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …...
Holoens2开发报错记录02_通过主机获取彩色和深度数据流常见错误
01.E1696 E1696 无法打开源文件 “stdio.h” 解决方法: 更新一下SDK 1)打开Visual Studio Installer,点击修改 2)安装详细信息中自己系统对应的SDK,点击修改即可 02.WinError 10060 方法来源 解决方法:…...
粉色和紫色渐变壁纸怎么设计?
粉色和紫色的渐变壁纸设计可以打造极为浪漫的氛围,这两种颜色的搭配极具梦幻感与浪漫气息,常被用于各种浪漫主题的设计之中。以下是关于粉色和紫色渐变壁纸的设计方法: 一、渐变方向设计 横向渐变:从画面左侧的粉色过渡到右侧的紫…...
maven Problem shading JAR的几个解决方案
1 现象 Error creating shaded jar: Problem shading JAR :xxxxxx.jar entry META-INF/versions/11/com/fasterxml/jackson/core/io/doubleparser/BigSignificand.class: java.lang.IllegalArgumentException -> [Help 1] 2 原因 这个问题通常是由于 maven-s…...