当前位置: 首页 > news >正文

Go语言爬虫系列教程(一) 爬虫基础入门

Go爬虫基础入门

1. 网络爬虫概念介绍

1.1 什么是网络爬虫

网络爬虫(Web Crawler),又称网页蜘蛛、网络机器人,是一种按照一定规则自动抓取互联网信息的程序或脚本。其核心功能是模拟人类浏览网页的行为,通过发送网络请求、解析响应内容,批量获取目标数据。爬虫广泛应 用于数据采集、搜索引擎索引构建、竞品分析、学术研究等领域。

我们可以把互联网比作一张大网,而爬虫便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了,这也是为什么爬虫会用spider表示了。

1.2 核心工作流程

爬虫的工作流程可概括为以下 5 个关键步骤,:

  1. 发送 HTTP 请求

    • 向目标网站的 URL 发送请求(如GET/POST),模拟浏览器请求网页数据
    • 就像你在浏览器地址栏输入网址并按下回车键
    • 示例:使用curl https://example.com命令或Go代码中的http.Get("https://example.com")
  2. 获取响应内容

    • 接收服务器返回的响应,通常包含网页的 HTML/JSON 数据、状态码、响应头等
    • 类似于你看到网页在浏览器中加载出来
    • 关键点:检查状态码(200表示成功,404表示页面不存在)和内容类型(HTML/JSON/XML等)
  3. 解析数据

    • 从响应内容中提取所需信息,如标题、正文、图片链接等
    • 想象你在阅读报纸,但只关注特定的新闻或广告
    • 方法
      • HTML解析:使用Go的goquery库(类似jQuery)
      • JSON解析:使用Go的encoding/json
      • 正则表达式:使用regexp包匹配特定模式
  4. 数据存储

    • 将提取的数据保存到本地或数据库中,便于后续分析和使用
    • 常用存储方式
      • 文本文件(CSV、JSON):简单直接,适合小数据量
      • 数据库(MySQL、MongoDB):结构化存储,支持查询
      • 云存储(S3、OSS):大规模数据存储
  5. 跟进链接

    • 从当前页面中提取新的URL,加入待爬队列,循环处理以抓取更多相关页面
    • 就像你阅读一本书,发现参考文献后决定再去查阅那些书籍
    • 实现方式:使用队列或集合存储未访问的URL,确保不重复爬取
      在这里插入图片描述

1.3 爬虫的典型应用场景

  1. 搜索引擎

    • Google、百度通过爬虫抓取全网页面,构建索引库
    • 实现原理:定期爬取互联网页面,提取关键词和内容,建立倒排索引
    • Go语言优势:高并发能力使其能同时处理大量网页请求
  2. 数据分析与市场研究

    • 爬取电商平台价格、评论数据进行竞品分析
    • 案例:某电商可以通过爬虫监控竞争对手的价格变动,及时调整自身定价策略
    • 实现方式:针对特定网站设计爬虫,定期抓取并分析数据变化
  3. 内容聚合

    • 新闻聚合平台收集各大媒体最新报道
    • 技术要点:提取正文、去重、分类、时效性处理
    • 使用Go的协程可实现高效的并发爬取多个新闻源
  4. 学术研究数据采集

    • 收集科研论文、专利信息或公开数据集
    • 例如:分析某领域研究热点趋势、引用关系网络
    • 需注意学术平台的使用条款和访问限制
  5. 自动化监控

    • 监控网站内容变更、价格波动、库存变化
    • 实际应用:房产网站监控新房源、机票价格跟踪
    • Go实现:结合定时任务(cron)和爬虫,实现自动化监控和通知

1.4 爬虫的分类

根据不同的维度,爬虫可分为多种类型:

按抓取策略分类
类型核心算法适用场景Go 实现要点
广度优先 (BFS)队列 (FIFO)全站爬取(如搜索引擎)使用 channel 实现 URL 队列
深度优先 (DFS)栈 (LIFO)单页面深度数据挖掘递归实现页面跳转
最佳优先优先级队列重点数据优先抓取实现评分函数排序 URL
广度优先爬虫示意
第1层:首页A
第2层:A链接到的页面B、C、D
第3层:B、C、D链接到的新页面...

深度优先爬虫示意

首页A → A链接到的页面B → B链接到的页面E → E链接到的页面...↓(回溯后)↓A链接到的页面C → ...
按技术架构分类
  • 单机爬虫

    • 在单个主机上运行,适合小规模数据采集
    • 优势:实现简单,部署方便
    • 局限:爬取速度和规模有限
    • Go实现:利用goroutine实现并发爬取,提高单机效率
  • 分布式爬虫

    • 通过多台主机协作,并行处理大量 URL
    • 适用:搜索引擎、大型数据服务公司
    • 技术挑战:URL分配策略、任务调度、结果合并
    • Go实现:结合消息队列(如Kafka)和微服务架构
按目标网站交互方式分类
  • 静态网页爬虫

    • 直接获取HTML内容并解析
    • 适合:内容直接包含在源代码中的网站
    • 优势:实现简单、速度快
    • 示例:goquery库解析HTML
  • 动态网页爬虫

    • 需处理JavaScript渲染的内容
    • 适合:现代SPA(单页应用)网站
    • 实现方式:
      • 使用无头浏览器(如Chrome Headless)
      • 分析并模拟API请求
    • Go工具:可结合chromedp库实现浏览器自动化

1.5 法律规范与伦理道德

虫开发不仅是技术问题,更涉及法律和伦理边界。负责任的爬虫开发者应当:

  • 遵守robots.txt协议:网站通过robots.txt声明禁止爬虫抓取的页面(如User-Agent: * Disallow: /private/),爬虫需遵守规则以避免滥用。

  • 限制请求频率:过度频繁的请求会增加服务器负担,需设置合理的请求间隔(如每次请求间隔 1 秒)。

  • 尊重版权:不得抓取受保护的内容(如付费文档、用户隐私数据),避免侵权。

  • 避免过度爬取: 只获取确实需要的数据,不进行无目的大规模爬取,考虑使用网站提供的官方API(如有)替代爬虫

  • 识别与处理个人敏感数据: 若爬取内容含个人可识别信息(PII),需慎重处理并遵守数据保护法规,实施数据匿名化处理

2. HTTP协议基础

爬虫本质上就是模拟浏览器请求,并获取相应信息,所以写爬虫之前,我们还需要了解一些HTTP的基础知识。

2.1 HTTP简介

HTTP(HyperText Transfer Protocol,超文本传输协议) 是互联网上应用最广泛的应用层协议,用于客户端(如浏览器)与服务器之间的数据通信。它基于 TCP/IP 协议,定义了客户端如何向服务器发送请求、服务器如何响应请求,以及数据传输的格式和规则。

HTTP的特点

  • 无状态 - 服务器不会保存客户端的历史请求信息(解决方案:Cookie/Session)
  • 基于请求-响应模型 - 客户端发起请求,服务器返回响应
  • 支持多种数据类型 - 文本、图片、视频、应用程序等

HTTP就像你去餐厅点餐。点餐(请求)时,你需要明确告诉服务员(服务器)你想要什么菜(资源),怎么做(请求体)。服务员记下后去后厨,然后把菜(响应体)送到你桌上。每次点菜都是独立的,服务员不会记得你上次点了什么(无状态)。如果是你经常去的店铺,老板跟你也很熟悉,知道你要点什么菜(有状态)

2.2 HTTP 请求结构详解

一个完整的HTTP请求由三部分组成:请求行请求头请求体

# 请求行 
GET /index.html HTTP/1.1 			# 方法 + URL + 协议版本 # 请求头(键值对,描述请求信息) 
Host: www.example.com 				# 目标服务器域名 
User-Agent: Mozilla/5.0 			# 客户端标识 
Accept: text/html,application/xml 	# 可接受的响应类型 
Content-Type: application/json 		# 请求体格式(仅 POST/PUT 等方法有) 
Cookie: sessionId=12345 			# 会话信息 # 请求体(仅 POST/PUT 等方法才存在) 
{ "name": "clown", "age": 30 }
请求方法详解

每种HTTP方法都有特定用途,在爬虫开发中需根据目标网站的API设计选择合适的方法:

方法用途爬虫应用场景是否有请求体
GET获取资源抓取网页内容、下载图片、获取API数据
POST提交数据(创建资源)表单登录、发送搜索参数、上传文件
PUT更新资源(覆盖完整资源)更新用户信息(少用于爬虫)
DELETE删除资源删除用户上传内容(少用于爬虫)
HEAD仅获取响应头(不获取正文)检查资源是否存在、获取文件大小
OPTIONS获取服务器支持的方法列表跨域请求前的预检(CORS)

Go爬虫中的应用示例

// GET请求示例
resp, err := http.Get("https://example.com")// POST请求示例
data := strings.NewReader(`{"username":"test","password":"123456"}`)
resp, err := http.Post("https://example.com/login", "application/json", data)// 自定义请求(任何方法)
req, err := http.NewRequest("HEAD", "https://example.com/large-file.zip", nil)
resp, err := http.DefaultClient.Do(req)
重要请求头及其作用

在爬虫开发中,正确设置请求头对成功获取数据至关重要:

请求头名称作用爬虫注意事项
User-Agent标识客户端类型(浏览器/爬虫)模拟真实浏览器避免被屏蔽,如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Referer表示请求来源页面部分网站通过验证Referer防盗链,需模拟正确来源
Cookie存储用户会话信息爬取需登录的页面时必须设置,常需先模拟登录获取
Accept指定可接受的响应内容类型设置为text/html获取网页,application/json获取API数据
Accept-Language首选语言国际网站可能根据此返回不同语言内容
Authorization身份验证信息API访问常用,如Bearer <token>
Accept-Encoding支持的压缩方式这个是用来控制输出的字符编码的,在爬虫中如果遇到输出结果乱码,就需要取消这个参数
Accept-Language首选语言获取特定语言内容:Accept-Language: zh-CN,en;q=0.9
除了以上的一些请求参数,还有一些网站自有的的请求参数,用来验证请求是否合法的,例如:
  • 小红书的 x-s、x-t等参数
  • 抖音的a_bogus、msToken等参数

Go代码中设置请求头示例:

req, err := http.NewRequest("GET", "https://example.com", nil)
if err != nil {log.Fatal(err)
}// 设置User-Agent模拟Chrome浏览器
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124")
// 设置Referer
req.Header.Set("Referer", "https://example.com/")
// 设置Cookie
req.Header.Set("Cookie", "sessionId=abc123; userId=123456")client := &http.Client{}
resp, err := client.Do(req)

2.3 HTTP响应(Response)结构详解

状态行、响应头、响应体(可选) 三部分组成。

# 状态行
HTTP/1.1 200 OK      # 协议版本 + 状态码 + 原因短语# 响应头(键值对,描述响应信息)
Content-Type: text/html; charset=utf-8  # 响应体格式
Content-Length: 12345              # 响应体字节数
Set-Cookie: sessionId=67890; Max-Age=3600  # 设置客户端 Cookie
Date: Mon, 12 May 2025 12:00:00 GMT  # 响应生成时间# 响应体(资源内容,如 HTML、JSON、图片二进制数据)
<!DOCTYPE html><html><body>Hello World!</body></html>
响应内容的处理策略

根据Content-Type,爬虫需采用不同处理策略:

内容类型常见用途Go处理方法
text/html网页内容使用goquery或Go标准库解析HTML
application/jsonAPI数据使用encoding/json库解析
text/plain纯文本数据直接读取字符串处理
image/*图片内容保存为文件或使用image包处理
application/pdfPDF文档保存为文件,使用第三方库解析

2.4 HTTP状态码详解与爬虫处理策略

HTTP状态码是服务器对请求处理结果的标识,对爬虫行为有重要指导意义:

状态码含义爬虫处理策略
2xx - 成功
200 OK请求成功常规处理,解析响应内容
201 Created资源创建成功POST请求后确认资源创建(少用于爬虫)
204 No Content成功但无返回内容适用于只需确认操作成功的场景
3xx - 重定向
301 Moved Permanently永久重定向更新URL缓存,访问新地址
302 Found临时重定向跟随重定向但不更新缓存
304 Not Modified内容未变化可使用本地缓存(配合If-Modified-Since头)
4xx - 客户端错误
400 Bad Request请求格式错误检查请求参数和格式
401 Unauthorized未认证需添加/更新认证信息(如登录)
403 Forbidden拒绝访问可能触发反爬机制,考虑降低请求频率或更换IP
404 Not Found资源不存在检查URL是否正确,可从链接源更新URL
429 Too Many Requests请求过多降低请求频率,实现自动退避算法
5xx - 服务器错误
500 Internal Server Error服务器内部错误通常非爬虫导致,可稍后重试
502 Bad Gateway网关错误可能是服务器过载,稍后重试
503 Service Unavailable服务暂时不可用实现指数退避重试策略
Go中的状态码处理示例
resp, err := http.Get(url)
if err != nil {log.Printf("请求失败: %v", err)return
}
defer resp.Body.Close()switch resp.StatusCode {
case http.StatusOK: // 200// 正常处理body, err := io.ReadAll(resp.Body)// ...处理内容case http.StatusMovedPermanently, http.StatusFound: // 301, 302// 处理重定向newLocation := resp.Header.Get("Location")log.Printf("重定向到: %s", newLocation)// 访问新URL...case http.StatusNotFound: // 404log.Printf("页面不存在: %s", url)// 可能需要更新URL库或移除此URLcase http.StatusTooManyRequests: // 429log.Printf("请求频率过高,等待后重试")// 实现退避算法time.Sleep(30 * time.Second)// 重试...case http.StatusInternalServerError: // 500log.Printf("服务器错误,稍后重试")// 实现延迟重试// ...
}

3. 简单爬虫示例

接下来开始我们,第一个爬虫演示,目标站点是:https://httpbin.org/get ,这个站点响应的内容是我们访问站点的请求体
在这里插入图片描述

下面就让我用程序来获取这些内容:

package mainimport ("fmt""io""net/http""os"
)func main() {// 目标URLurl := "https://httpbin.org/get"// 发送HTTP GET请求resp, err := http.Get(url)if err != nil {fmt.Printf("访问url错误: %v\n", err)return}defer resp.Body.Close() // 确保响应体最终被关闭// 检查状态码if resp.StatusCode != http.StatusOK {fmt.Printf("请求错误,状态码为: %d\n", resp.StatusCode)return}// 读取响应体body, err := io.ReadAll(resp.Body)if err != nil {fmt.Printf("读取response body错误: %v\n", err)return}//输出响应体fmt.Println(string(body))// 保存到文件file, err := os.Create("output.html")if err != nil {fmt.Printf("创建文件错误: %v\n", err)return}defer file.Close() // 确保文件最终被关闭_, err = file.Write(body)if err != nil {fmt.Printf("写入文件错误: %v\n", err)return}fmt.Println("成功保存文件 output.html")fmt.Printf("内容长度: %d bytes\n", len(body))
}

代码解析与要点说明

  1. 导入必要包

    • net/http - 提供HTTP客户端和服务器实现
    • io - 提供基本I/O操作
    • os - 提供操作系统功能,如文件操作
  2. 设置目标URL

    • url := "https://httpbin.org/get" - 定义要爬取的网页地址
    • httpbin.org是测试HTTP请求的实用网站,/get端点返回简单json页面
  3. 发送GET请求

    • resp, err := http.Get(url) - 使用标准库发送HTTP GET请求
    • 这行代码等同于浏览器在地址栏输入URL并按回车
  4. 错误处理与资源释放

    • 检查err != nil确保请求成功
    • defer resp.Body.Close() - 确保在函数结束时关闭响应体,防止资源泄漏
    • 资源释放是Go编程的重要实践,尤其在爬虫这类I/O密集型应用中
  5. 状态码检查

    • if resp.StatusCode != http.StatusOK - 确认服务器返回200成功状态
    • 避免处理错误页面(如404页面),确保获得预期内容
  6. 读取响应内容

    • body, err := io.ReadAll(resp.Body) - 将整个响应体读入内存
    • 适用于小型页面,大文件应考虑流式处理
  7. 保存到文件

    • file, err := os.Create("output.html") - 创建输出文件
    • file.Write(body) - 将响应内容写入文件
    • 实际爬虫通常会解析内容而非直接保存
  8. 结果反馈

    • 打印成功消息和内容长度,提供操作反馈

相关文章:

Go语言爬虫系列教程(一) 爬虫基础入门

Go爬虫基础入门 1. 网络爬虫概念介绍 1.1 什么是网络爬虫 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称网页蜘蛛、网络机器人&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。其核心功能是模拟人类浏览网页的行为&#xff0c;通过发送网络…...

c/c++爬虫总结

GitHub 开源 C/C 网页爬虫探究&#xff1a;协议、实现与测试 网页爬虫&#xff0c;作为一种自动化获取网络信息的强大工具&#xff0c;在搜索引擎、数据挖掘、市场分析等领域扮演着至关重要的角色。对于希望深入理解网络工作原理和数据提取技术的 C/C 开发者&#xff0c;尤其是…...

【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南

【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南 一、前言 碰一碰分享的定义 在 HarmonyOS NEXT 系统中&#xff0c;华为分享推出的碰一碰分享功能&#xff0c;为用户带来了便捷高效的跨端分享体验。开发者通过简单的代码实现&#xff0c;就能调用系统 API 拉起分享卡片模板&…...

vue H5解决安卓手机软键盘弹出,页面高度被顶起

开发中安卓机上遇到的软键盘弹出导致布局问题 直接上代码_ 在这里插入代码片 <div class"container"><div class"appContainer" :style"{height:isKeyboardOpen? Heights :inherit}"><p class"name"><!-- 绑定…...

【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)

【pypi镜像源】使用devpi实现python镜像源代理&#xff08;缓存加速&#xff0c;私有仓库&#xff0c;版本控制&#xff09; 文章目录 1、背景与目标2、devpi-server 服务端搭建3、devpi 镜像源使用 1、背景与目标 背景1&#xff08;访问速度优化&#xff09;&#xff1a; 直…...

Spring Bean有哪几种配置方式?

大家好&#xff0c;我是锋哥。今天分享关于【Spring Bean有哪几种配置方式&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring Bean有哪几种配置方式&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Bean的配置方式主要有三种&#xff…...

无人机信号线被电磁干扰导致停机

问题描述&#xff1a; 无人机飞控和电调之间使用PWM信号控制时候&#xff0c;无人机可以正常起飞&#xff0c;但是在空中悬停的时候会出现某一个电机停机&#xff0c;经排查电调没有启动过流过压等保护&#xff0c;定位到电调和飞控之间的信号线被干扰问题。 信号线被干扰&am…...

RWA开发全解析:技术架构、合规路径与未来趋势

RWA开发全解析&#xff1a;技术架构、合规路径与未来趋势 ——2025年真实世界资产代币化的创新逻辑与实践指南 一、RWA的核心定义与爆发逻辑 1. 什么是RWA&#xff1f; RWA&#xff08;Real World Asset Tokenization&#xff09;是通过区块链技术将现实资产&#xff08;房地…...

消息队列作用及RocketMQ详解(1)

目录 1 什么是消息队列 2 为什么要使用消息队列 2.1 异步处理 2.2 解耦 2.3 削峰填谷 3. 如何选择消息队列&#xff1f; 4. RocketMQ 4.1 生产者 4.2 消费者 4.3 主题 4.4 NameSever 4.5 Broker 5. 生产者发送消息 5.1 普通消息发送 5.1.1 同步发送 5.1.2 异步发送 5…...

DICOM 网络服务实现:医学影像传输与管理的技术实践

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

恰到好处TDR

了解我的人都知道我喜欢那些从 1 到 10 到 11 的东西。对于那里的年轻人&#xff0c;参见 Spinal Tap&#xff0c;1984 年。但是有没有把它调得太高这样的事情呢&#xff1f;我收到并回答了很多关于使用时域反射仪 &#xff08;TDR&#xff09; 进行测量的问题。 我需要多少带宽…...

kubernetes服务自动伸缩-VPA

实验环境 安装好k8s集群 一、准备工作 1、部署Metrics Server VPA 依赖 Metrics Server 来获取 Pod 的资源使用数据。首先需要部署 Metrics Server 下载地址&#xff08;需要连接VPN&#xff09;&#xff1a;wget https://github.com/kubernetes-sigs/metrics-server/relea…...

stm32之BKP备份寄存器和RTC时钟

目录 1.时间戳1.1 Unix时间戳1.2 UTC/GMT1.3 时间戳转换**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…...

OSCP - Hack The Box - Sau

主要知识点 CVE-2023-27163漏洞利用systemd提权 具体步骤 执行nmap扫描&#xff0c;可以先看一下55555端口 Nmap scan report for 10.10.11.224 Host is up (0.58s latency). Not shown: 65531 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp o…...

C++色彩博弈的史诗:红黑树

文章目录 1.红黑树的概念2.红黑树的结构3.红黑树的插入4.红黑树的删除5.红黑树与AVL树的比较6.红黑树的验证希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 红黑树是一种自平衡二叉查找树&#xff0c;每个节点都带有颜色属性&#xff0c;颜色或为…...

14.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing_interleaved

本实例主要讲解内容 这个Three.js示例展示了如何结合使用索引几何体、GPU实例化和交错缓冲区来高效渲染大量相同模型的不同实例。通过这种技术组合&#xff0c;我们可以在保持较低内存占用的同时渲染数千个独立变换的对象。 核心技术包括&#xff1a; 索引几何体的实例化渲染…...

「华为」人形机器人赛道投资首秀!

温馨提示&#xff1a;运营团队2025年最新原创报告&#xff08;共210页&#xff09; —— 正文&#xff1a; 近日&#xff0c;【华为】完成具身智能赛道投资首秀&#xff0c;继续加码人形机器人赛道布局。 2025年3月31日&#xff0c;具身智能机器人头部创企【千寻智能&#x…...

GitHub 趋势日报 (2025年05月11日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1harry0703/MoneyPrinterTurbo利用ai大模型&#xff0c;一键生成高清短视频使用…...

MySQL查询优化100条军规

概述 以下是MySQL查询优化的关键军规&#xff0c;分为不同类别&#xff0c;帮助您系统化提升数据库性能资料已经分类整理好&#xff0c;喜欢的朋友自取&#xff1a;https://pan.quark.cn/s/f52968c518d3 一、索引优化 为WHERE、JOIN、ORDER BY字段建索引联合索引遵循最左前缀…...

WEBSTORM前端 —— 第3章:移动 Web —— 第1节:平面转换、渐变

目录 一.平面转换 二.平面转换 – 平移 ①属性 ②取值 ③技巧 三.平移实现居中效果 四.案例——双开门效果 五.平面转换 – 旋转 ①属性 ②技巧 六.平面转换 – 改变转换原点 ①属性 ②取值 七.案例-时钟 八.平面转换 – 多重转换 九.平面转换 – 缩放 ①属性 …...

1.10-数据传输格式

1.10-数据传输格式 在对网站进行渗透测试时&#xff0c;使用目标服务器规定的数据传输格式来进行 payload 测试非常关键 如果不按规定格式发送数据&#xff0c;服务器可能直接拒绝请求或返回错误响应&#xff0c;比如&#xff1a; 接口要求 JSON 格式&#xff0c;而你用的是…...

Python制作Dashboard【待续】

运行环境&#xff1a;jupyter notebook (python 3.12.7)...

物理:海市蜃楼是宇宙背景辐射吗?

宇宙背景辐射(特别是宇宙微波背景辐射,CMB)与海市蜃楼是两种完全不同的现象,它们的物理机制、来源和科学意义截然不同。以下是详细的解释: 1. 宇宙微波背景辐射(CMB)的本质 起源:CMB是大爆炸理论的关键证据之一。它形成于宇宙诞生后约38万年(即“最后散射时期”),当…...

联想 SR550 服务器,配置 RAID 5教程!

今天的任务&#xff0c;是帮客户的一台联想Lenovo thinksystem x SR550 服务器&#xff0c;配置RAID 5&#xff0c;并安装windows server 2019操作系统。那么依然是按照我的个人传统&#xff0c;顺便做一个教程&#xff0c;分享给有需要的粉丝们。 第一步&#xff0c;服务器开机…...

Docker-配置私有仓库(Harbor)

配置私有仓库&#xff08;Harbor&#xff09; 一、环境准备安装 Docker 三、安装docker-compose四、准备Harbor五、配置证书六、部署配置Harbor七、配置启动服务八、定制本地仓库九、测试本地仓库 Harbor(港湾)&#xff0c;是一个用于 存储 和 分发 Docker 镜像的企业级 Regi…...

1.5 连续性与导数

一、连续性的底层逻辑&#xff08;前因&#xff09; 为什么需要研究连续性&#xff1f; 数学家在研究函数图像时发现两类现象&#xff1a;有些函数能用一笔画完不断开&#xff08;如抛物线&#xff09;&#xff0c;有些则会出现"断崖"“跳跃"或"无底洞”&a…...

Day22打卡-复习

复习日 仔细回顾一下之前21天的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码 泰坦尼克号人员生还预测https://www.kaggle.com/competitions/titanic/overview K…...

配置Hadoop集群环境准备

&#xff08;一&#xff09;Hadoop的运行模式 一共有三种&#xff1a; 本地运行。伪分布式完全分布式 &#xff08;二&#xff09;Hadoop的完全分布式运行 要模拟这个功能&#xff0c;我们需要做好如下的准备。 1&#xff09;准备3台客户机&#xff08;关闭防火墙、静态IP、…...

HTTPS全解析:从证书签发到TLS握手优化

HTTPS&#xff08;超文本传输安全协议 本质上是HTTP的安全版本。标准的HTTP协议仅规范了客户端与服务器之间的通信格式&#xff0c;但所有数据传输都是明文的&#xff0c;容易被中间人窃听和篡改。HTTPS通过加密传输数据解决了这一安全问题。 HTTPS可以理解为"HTTPTLS/SS…...

#将一个 .c 文件转变为可直接运行的文件过程及原理

将一个 .c 文件&#xff08;C语言源代码&#xff09;转变为可直接运行的可执行文件&#xff0c;涉及从源代码到机器码的编译和链接过程。以下是详细的过程与原理&#xff0c;分为步骤说明&#xff1a; 一、总体流程 .c 文件到可执行文件的过程通常包括以下几个阶段&#xff1a…...

【软件学习】GeneMiner 2:系统发育基因组学的一体化全流程分析工具

【软件学习】GeneMiner 2—— 系统发育基因组学的一体化全流程分析工具 文章目录 【软件学习】GeneMiner 2—— 系统发育基因组学的一体化全流程分析工具前言一、软件了解二、软件安装三、软件使用示例演示3.1 快速掌握使用方法3.2 获取质体基因组和质体基因3.3 单拷贝基因建树…...

聊一聊AI对接口测试的潜在影响有哪些?

目录 一、 自动化测试用例生成 二、 缺陷预测与根因分析 三、自适应测试维护 四、实时监控与自适应优化 五、 性能与安全测试增强 六、测试结果分析与报告 七、持续测试与DevOps集成 八、挑战与局限性 九、未来趋势 使用AI可以自动化测试用例生成、异常检测、结果分析…...

wordcount在mapreduce的例子

1.启动集群 2.创建项目 项目结构为&#xff1a; 3.pom.xml文件为 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://mave…...

CSS3 遮罩

在网页设计中&#xff0c;我们经常需要实现一些特殊的视觉效果来增强用户体验。CSS3 遮罩&#xff08;mask&#xff09;允许我们通过控制元素的可见区域来创建各种精美的视觉效果。本文将带你全面了解 CSS3 遮罩的功能和应用。 什么是 CSS3 遮罩&#xff1f; CSS3 遮罩是一种…...

HTTP协议解析:Session/Cookie机制与HTTPS加密体系的技术演进(一)

一.HTTP协议 我们上篇文章已经提到了对于自定义协议的序列化与反序列化。那么有没有什么比较成熟的&#xff0c;大佬们写的应用层协议&#xff0c;供我们参考使用呢?HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c; HTTP&#xff08;HyperText Transfer Prot…...

Matlab 234-锂电池充放电仿真

1、内容简介 Matlab 234-锂电池充放电仿真 可以交流、咨询、答疑 2、内容说明 略 锂离子电池已经广泛应用于我国目前电子产品市场&#xff0c;当下手机市场和新能源市场对于锂离子电池的大量需求&#xff0c;推动了锂离子电池的发展&#xff0c;我国已经成为世界上锂离子电池…...

std::move 和 std::forward

关联点 都是执行转换(cast)的函数&#xff08;函数模板&#xff09;&#xff0c;不产生任何可执行代码。且都可以把实参转换成右值。 std::move无条件将实参&#xff08;const除外 &#xff09;转换成右值引用&#xff0c;std::forward 条件返回右值引用 _EXPORT_STD template…...

工业协议跨界实录:零基础玩转PROFINET转EtherCAT主站智能网关

工业自动化领域的金字塔就是工业通信行业&#xff0c;用的最多的便是协议转换模块&#xff0c;通俗来说&#xff0c;网关就像一个“语言翻译器”&#xff0c;能把一种通信语言转换成另一种&#xff0c;满足实际通信需求&#xff0c;还能保护投资。PROFINET 转EtherCAT 网关WL-P…...

开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究

摘要&#xff1a;本文聚焦新微商服务能力升级路径&#xff0c;探讨开源链动21模式、AI智能名片与S2B2C商城小程序在重构培训体系、激励机制及用户服务中的协同作用。研究显示&#xff0c;新微商通过“技术赋能-机制创新-服务深化”三维变革&#xff0c;将传统微商的“产品压货”…...

vue3配置element-ui的使用

今天阐述一下如何在vue中进行配置使用element-ui&#xff1b; 一&#xff0c;配置下载Element 1.首页在电脑上下载好vue&#xff0c;以及npm&#xff0c;可以去相关的官方进行下载。 2.进行配置命令 npm install element-plus --save如报错&#xff1a; npm error code ERE…...

39-绘制渐变的文字

39-绘制渐变的文字_哔哩哔哩_bilibili39-绘制渐变的文字是一次性学会 Canvas 动画绘图&#xff08;核心精讲50个案例&#xff09;2023最新教程的第40集视频&#xff0c;该合集共计53集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibi…...

HBase进阶之路:从原理到实战的深度探索

目录 一、HBase 核心概念再梳理 1.1 RowKey 1.2 Column Family 1.3 Region 二、架构与运行机制剖析 2.1 架构组件详解 2.1.1 Client 2.1.2 Zookeeper 2.1.3 Master 2.1.4 RegionServer 2.1.5 HDFS 2.2 数据读写流程深度解析 2.2.1 数据写入流程 2.2.2 数据读取流…...

使用 AddressSanitizer 检测栈内存越界错误

一、概述 在 C/C 编程中&#xff0c;栈内存越界 是一种常见而危险的内存错误&#xff0c;通常发生在局部变量数组被访问时索引越界。由于栈空间的结构特点&#xff0c;越界写入可能覆盖返回地址或其他局部变量&#xff0c;导致不可预测的行为甚至程序崩溃。传统的调试手段难以定…...

【技巧】离线安装docker镜像的方法

回到目录 【技巧】离线安装docker镜像的方法 0. 为什么需要离线安装&#xff1f; 第一、 由于docker hub被墙&#xff0c;所以 拉取镜像需要配置国内镜像源 第二、有一些特殊行业服务器无法接入互联网&#xff0c;需要手工安装镜像 1. 可以正常拉取镜像服务器操作 服务器…...

vue实现与后台springboot传递数据【传值/取值 Axios 】

vue实现与后台springboot传递数据【传值/取值】 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每…...

Git日志信息

Git日志信息 1. log log 命令用于查看 git 的各种日志信息&#xff0c;在使用 log 后&#xff0c;git 会进入 vim 模式&#xff0c;此时退出日志模式需要按下 q 键。可以通过小箭头来浏览未显示出来的内容。 1.1 查看日志信息 git log git log --prettyoneline #美观输出日…...

Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载

Linux操作系统从入门到实战&#xff08;六&#xff09;Linux开发工具&#xff08;上&#xff09;详细介绍什么是软件包管理器&#xff0c;Linux下如何进行软件和软件包的安装、升级与卸载 前言一、 软件包管理器1.1 传统安装方式的麻烦&#xff1a;从源代码说起1.2 软件包&…...

Java中的​​策略模式​​和​​模板方法模式

文章目录 1. 策略模式&#xff08;Strategy Pattern&#xff09;案例&#xff1a;支付方式选择 2. 模板方法模式&#xff08;Template Method Pattern&#xff09;案例&#xff1a;制作饮料流程 3. 策略模式 vs 模板方法模式4.总结 在Java中&#xff0c;策略模式和模板方法模式…...

C#里WPF使用触发器实现鼠标点击响应

在WPF里创建了一个自定义的用户控件, 要想在这个控件里实现鼠标的点击事件响应, 就需要添加事件触发器交互定义,如下代码: <ListView x:Name="ListViewMenu" ItemsSource="{Binding Path=SubItems}" Foreground="White" ScrollViewer.Ho…...

tensorflow-cpu

python3.8~3.12安装tensorflow-cpu 准备 创建并进入目录 mkdir tf-cpu cd tf-cpu编写测试代码 test_tensorflow.py import tensorflow as tf# 检查TensorFlow版本 print("\nTensorFlow version:", tf.__version__,end\n\n)# 创建一个简单的计算图并运行它 tensor …...