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

网络爬虫【爬虫库request】

  我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步

今天来讲一讲爬虫

Requests是Python的一个很实用的HTTP客户端库,完全满足如今网络爬虫的需求。与Urllib对比,Requests不仅具备Urllib的全部功能;在开发使用上,语法简单易懂,完全符合Python优雅、简洁的特性;在兼容性上,完全兼容Python 2和Python 3,具有较强的适用性。

请求方式

HTTP的请求方式分为GET和POST

GET请求

url语法如下:

# 不带参数
url_without_params = "https://www.baidu.com/"# 带参数 wd
url_with_params = "https://www.baidu.com/s?参数名=参数值"

注:如果一个URL有多个参数,参数之间用“&”连接,并且,request对于带参数的url请求有两种处理方式:

import requests# 第一种方式
r = requests.get('https://www.baidu.com/s?参数名=参数值')# 第二种方式
url = 'https://www.baidu.com/s'
params = {'参数名': '参数值'}
# 左边 params 在 GET 请求中表示设置参数
r = requests.get(url, params=params)# 输出生成的 URL
print(r.url)

对于动态变化的参数,我们可以采用%s来占位的方式来处理:

url_template = 'https://www.baidu.com/s?参数名=%s'
search_term = '参数值'# 使用字符串格式化将搜索词插入到URL中
formatted_url = url_template % search_termprint(formatted_url)

这样输出的将会是:

https://www.baidu.com/s?参数名=参数值

POST请求

POST请求常用来提交表单,表单数据就是POST的请求参数。在 requests 中实现POST请求时,需要设置 data 参数,数据格式可以是字典、元组、列表或JSON。不同格式各有优势。

# 字典类型
data = {'key1': 'value1', 'key2': 'value2'}# 元组或列表
# 这里应该是元组的列表,而不是元组中包含元组
tuple_list = (('key1', 'value1'), ('key2', 'value2'))# JSON
import json# 将字典转换为JSON
data_json = json.dumps(data)# 发送POST请求
import requests
r = requests.post("https://www.baidu.com/", data=data_json)
print(r.text)

tips:什么是JOSN:

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但是它是独立于语言的,许多不同的编程语言都支持生成和解析JSON数据,使其成为理想的数据交换语言。

JSON是构建在两种结构之上的:


1. 键值对:数据以`名称/值`对的形式存储,其中名称(或称为键)是一个字符串,而值可以是字符串、数字、数组、布尔值或另一个JSON对象。

2. 数组:数据以有序的列表形式存储,列表中的每个元素可以是字符串、数字、数组、布尔值或另一个JSON对象。

一个典型的JSON对象示例如下:

{"name": "John Doe","age": 30,"is_student": false,"hobbies": ["reading", "gaming", "sports"],"address": {"street": "123 Main St","city": "Anytown","state": "CA","zip": "12345"}
}

在这个例子中,`name`、`age`、`is_student`、`hobbies`和`address`是键,而它们对应的值分别是字符串、数字、布尔值、字符串数组和另一个JSON对象。

JSON因其简洁和易于解析的特性,在Web开发中被广泛用于客户端和服务器之间的数据交换。例如,当一个Web应用从服务器请求数据时,服务器通常会以JSON格式返回数据,然后Web应用可以使用JavaScript轻松地解析这些数据并更新用户界面。

`requests.Response`对象的属性和方法


1.基本响应信息

• `r.status_code`

• 作用:返回响应状态码(如200、404、500等)。

• 使用场景:判断请求是否成功。


• `r.reason`

• 作用:返回响应状态码的文本描述(如`OK`、`Not Found`等)。

• 使用场景:提供更详细的响应状态描述。


• `r.url`

• 作用:返回实际请求的URL(可能经过重定向后的最终URL)。

• 使用场景:确认请求的最终地址。


2.响应内容

• `r.raw`

• 作用:返回原始响应体,可以通过`r.raw.read()`读取。

• 使用场景:处理二进制数据或流式响应。


• `r.content`

• 作用:以字节方式返回响应体,需要手动解码。

• 使用场景:处理二进制文件(如图片、视频)。


• `r.text`

• 作用:以字符串方式返回响应体,会自动根据响应头的`Content-Type`或`Content-Encoding`解码。

• 使用场景:处理文本内容(如HTML、JSON)。


• `r.json()`

• 作用:将响应体解析为JSON对象。

• 使用场景:处理JSON格式的响应数据。


• `r.encoding`

• 作用:返回响应的编码格式(如`utf-8`)。

• 使用场景:确认或修改响应的编码。


• `r.apparent_encoding`

• 作用:基于响应内容分析得出的编码格式(可能与`r.encoding`不同)。

• 使用场景:当`r.encoding`为空或不准确时,作为备选编码。


3.响应头和Cookie

• `r.headers`

• 作用:以字典形式返回响应头,字典键不区分大小写。

• 使用场景:获取响应头中的信息(如`Content-Type`、`Content-Length`等)。


• `r.cookies`

• 作用:返回请求后的Cookie对象。

• 使用场景:获取服务器返回的Cookie信息。


• `r.links`

• 作用:返回响应头中的`Link`字段内容,以字典形式存储。

• 使用场景:处理分页或资源链接。


4.重定向和跳转

• `r.history`

• 作用:返回一个包含所有中间跳转响应的列表。

• 使用场景:跟踪请求的跳转路径。


• `r.is_redirect`

• 作用:判断响应是否是重定向(如301、302状态码)。

• 使用场景:控制重定向逻辑。


• `r.is_permanent_redirect`

• 作用:判断响应是否是永久重定向(301状态码)。

• 使用场景:处理需要更新URL的重定向。


• `r.next`

• 作用:返回下一个响应对象(如果存在重定向)。

• 使用场景:手动处理重定向时获取下一个响应。


5.性能和资源管理

• `r.elapsed`

• 作用:返回从发送请求到收到响应的总耗时(`timedelta`对象)。

• 使用场景:用于性能测试或监控请求的响应时间。


• `r.close()`

• 作用:关闭响应对象,释放资源。

• 使用场景:在使用`r.raw`或处理大文件时,手动关闭响应对象以释放资源。


6.迭代和流式处理

• `r.iter_content(chunk_size=1, decode_unicode=False)`

• 作用:以迭代的方式逐块读取响应内容,适合处理大文件。

• 参数:

• `chunk_size`:每次读取的块大小(以字节为单位)。

• `decode_unicode`:是否将内容解码为Unicode。

• 使用场景:下载大文件时逐块写入磁盘,避免占用过多内存。


• `r.iter_lines(decode_unicode=False, chunk_size=512)`

• 作用:以迭代的方式逐行读取响应内容,适合处理文本数据。

• 参数:

• `decode_unicode`:是否将内容解码为Unicode。

• `chunk_size`:每次读取的块大小。

• 使用场景:处理日志文件或文本数据时逐行读取。


7.请求信息

• `r.request`

• 作用:返回发送的请求对象(`requests.PreparedRequest`)。

• 使用场景:调试或查看发送的请求细节(如请求头、请求体等)。


8.异常处理

• `r.raise_for_status()`

• 作用:如果响应状态码表示请求失败(非200响应),则抛出异常。

• 使用场景:在需要严格处理请求失败时,自动抛出异常。

提交复杂的请求

在进行网络爬虫开发或与 Web API 交互时,我们常常需要对 HTTP 请求进行定制化处理,以满足各种复杂场景的需求。本文将详细介绍如何使用 Python 的 Requests 库实现复杂网络访问,包括添加请求头、使用代理 IP、证书验证、超时设置以及使用 Cookies 等常用功能。


一、添加请求头

在 HTTP 请求中,请求头(Headers)是客户端向服务器发送额外信息的重要载体,例如指定客户端的类型、语言、接受的数据类型等。通过设置请求头,可以模拟不同的浏览器或客户端行为,从而提高请求的成功率和兼容性。

以下是添加请求头的代码示例:

import requests# 定义请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3","Accept-Language": "en-US,en;q=0.9","Accept-Encoding": "gzip, deflate, br"
}# 发送请求并设置 headers 参数
response = requests.get("https://example.com", headers=headers)# 打印响应内容
print(response.text)


在上述代码中,我们首先定义了一个名为`headers`的字典,其中包含了常见的请求头字段,如`User-Agent`、`Accept-Language`和`Accept-Encoding`。然后在`requests.get`方法中通过`headers`参数将该字典传递给请求,从而在发送请求时附加了这些自定义的请求头信息。


二、使用代理 IP

在某些情况下,我们可能需要通过代理服务器来发送请求,例如隐藏真实 IP 地址、访问受限地区的内容等。Requests 库支持使用代理 IP,其使用方法与添加请求头类似,只需设置`proxies`参数即可。

以下是使用代理 IP 的代码示例:

import requests# 定义代理 IP
proxies = {"http": "http://123.45.67.89:8080","https": "https://123.45.67.89:8080"
}# 发送请求并设置 proxies 参数
response = requests.get("https://example.com", proxies=proxies)# 打印响应内容
print(response.text)



在代码中,`proxies`是一个字典,其键分别为`"http"`和`"https"`,对应的值是代理服务器的地址和端口号。通过设置`proxies`参数,Requests 库会将请求通过指定的代理服务器发送出去。

需要注意的是,在使用代理 IP 时,应确保代理服务器的地址和端口号是有效的,并且代理服务器支持目标网站的访问。此外,代理服务器可能会对请求进行限制或修改,因此在使用过程中需要根据实际情况进行调试和优化。


三、证书验证

在与 HTTPS 网站进行交互时,证书验证是一个重要的安全机制。默认情况下,Requests 库会对 HTTPS 证书进行验证,以确保通信的安全性。然而,在某些开发或测试环境中,我们可能需要关闭证书验证,或者使用自定义的证书文件。

以下是证书验证的代码示例:


关闭证书验证

import requests# 发送请求并关闭证书验证
response = requests.get("https://example.com", verify=False)# 打印响应内容
print(response.text)



在上述代码中,通过将`verify`参数设置为`False`,可以关闭对 HTTPS 证书的验证。这在开发过程中用于测试或访问自签名证书的网站时非常有用,但在生产环境中不建议关闭证书验证,因为这会降低通信的安全性。


使用自定义证书文件
 

import requests# 发送请求并指定证书文件路径
response = requests.get("https://example.com", verify="/path/to/certificate.pem")# 打印响应内容
print(response.text)


如果需要使用自定义的证书文件进行验证,可以将`verify`参数的值设置为证书文件的路径。这在访问需要特定证书验证的网站时非常有用,例如企业内部的 HTTPS 服务。


四、超时设置

在网络请求过程中,由于网络延迟、服务器响应缓慢等原因,可能会导致请求长时间没有得到响应。为了避免程序无限等待,可以通过设置超时时间来限制请求的等待时间。

以下是超时设置的代码示例:

import requests# 发送请求并设置超时时间为 5 秒
try:response = requests.get("https://example.com", timeout=5)print(response.text)
except requests.exceptions.Timeout:print("请求超时")


在代码中,通过设置`timeout`参数的值为`5`,表示请求的超时时间为 5 秒。如果在 5 秒内没有收到服务器的响应,Requests 库会抛出一个`Timeout`异常。通过捕获该异常,可以对超时情况进行相应的处理,例如重试请求或提示用户。

需要注意的是,超时时间的设置应根据实际需求进行调整。如果目标网站的响应速度较慢,可以适当增加超时时间;如果对响应速度要求较高,可以适当减少超时时间。


五、使用 Cookies

Cookies 是服务器存储在客户端的一小段文本信息,用于标识用户身份、记录用户偏好等。在使用 Requests 库发送请求时,可以通过设置`cookies`参数来使用 Cookies,从而实现会话管理等功能。

以下是使用 Cookies 的代码示例:
(从字符串转换 Cookies)

import requests# 从浏览器获取的 Cookies 字符串
temp_cookies = "cookie1=value1; cookie2=value2"# 将 Cookies 字符串转换为字典
cookies = {}
for cookie in temp_cookies.split("; "):key, value = cookie.split("=")cookies[key] = value# 发送请求并设置 cookies 参数
response = requests.get("https://example.com", cookies=cookies)# 打印响应内容
print(response.text)


在上述代码中,`temp_cookies`是从浏览器的开发者工具中获取的 Cookies 字符串。通过两次分割操作,第一次以`"; "`分割得到列表 A,第二次对列表 A 中的每个元素以`"="`分割得到字典的键值对,从而将 Cookies 字符串转换为字典格式。然后在`requests.get`方法中通过`cookies`参数将该字典传递给请求,即可在请求中使用这些 Cookies。


使用 RequestsCookieJar 对象

import requests# 发送请求并获取服务器返回的 Cookies
response = requests.get("https://example.com")
cookies = response.cookies# 打印 Cookies 信息
print(cookies)# 再次发送请求并使用获取到的 Cookies
response = requests.get("https://example.com", cookies=cookies)# 打印响应内容
print(response.text)


在代码中,当程序发送请求时(不设置参数`cookies`),Requests 库会自动生成一个`RequestsCookieJar`对象,该对象用于存放服务器返回的 Cookies 信息。通过`response.cookies`可以获取到该对象,然后在后续的请求中通过`cookies`参数将该对象传递给请求,从而实现 Cookies 的传递和使用。


Cookies 的读写操作

如果需要将 Cookies 信息持久化存储,可以使用`http`模块实现 Cookies 的读写操作。此外,还可以将 Cookies 以字典形式写入文件,这种方法相对简单,但安全性较低。以下是将 Cookies 以字典形式写入文件的代码示例:

import json# 将 Cookies 以字典形式写入文件
with open("cookies.json", "w") as f:json.dump(cookies, f)# 从文件中读取 Cookies
with open("cookies.json", "r") as f:cookies = json.load(f)# 打印读取到的 Cookies
print(cookies)



在代码中,通过`json`模块的`dump`方法将 Cookies 字典写入文件,通过`load`方法从文件中读取 Cookies 字典。这种方法可以方便地将 Cookies 信息保存到本地文件中,以便在后续的程序运行中能够重复使用。

下载与上传文件

文件下载

用Python的`requests`库从网络上下载图片并保存到本地的基本示例:

import requests# 图片的URL
url = 'https://www.python.org/static/img/python-logo.png'# 发送GET请求
r = requests.get(url)# 检查请求是否成功
if r.status_code == 200:# 打开一个文件用于写入二进制数据with open('python.jpg', 'wb') as f:# 将图片内容写入文件f.write(r.content)print("图片已成功下载并保存为 python.jpg")
else:print("请求失败,状态码:", r.status_code)

代码解释:
1. 导入库:

• `import requests`:导入`requests`库,用于发送HTTP请求。
2. 设置URL:

• `url='
3. 发送请求:

• `r = requests.get(url)`:使用`requests.get()`方法发送GET请求到指定的URL。
4. 检查响应状态码:

• `if r.status_code == 200:`:检查响应的状态码是否为200(表示请求成功)。


5. 保存文件:

• `with open('python.jpg', 'wb') as f:`:以二进制写入模式打开一个文件,文件名为`python.jpg`。

• `f.write(r.content)`:将响应内容(图片的二进制数据)写入文件。


6. 关闭文件:

• 使用`with`语句自动管理文件的打开和关闭,不需要显式调用`f.close()`。


7. 错误处理:

• 如果请求失败(状态码不是200),打印错误信息。

文件上传

文件上传的逻辑是把数据以字节流的形式上传到服务器上,再由服务器上传接收内容,文件上传有一定难度,难点在于服务器接收规则不同。

分析请求

首先通过Fiddler抓包工具来分析微博的发布过程中的网络请求信息:


(1)访问微博并准备抓包

• 访问微博:在浏览器中输入`

• 单击“高级”按钮:在微博页面上,可能存在一些高级选项或设置按钮,单击它可能会触发一些额外的网络请求或页面功能,为后续的抓包操作提供更多的信息。

• 使用Fiddler抓包:

• Fiddler是一款网络调试工具,可以捕获和分析所有客户端和服务器之间的HTTP/HTTPS通信。

• 由于在发送微博时,网页会发生302跳转(即浏览器会自动跳转到另一个页面),这会导致Chrome浏览器清空请求信息,使得抓取难度较大。因此,使用Fiddler可以更有效地捕获这些请求信息,因为它不会受到浏览器自动跳转的影响,能够完整地记录整个请求过程。


(2)发布微博并查看抓包信息

• 单击“选择文件”:在微博发布页面上,单击“选择文件”按钮,选择一张图片文件。这一步是为了模拟发布微博时上传图片的过程,上传图片会触发一个网络请求,将图片文件发送到微博服务器。

• 输入发布内容:在微博发布框中输入“Python爬虫”,这是微博的正文内容。输入内容后,微博客户端会将这些内容作为请求的一部分发送到服务器。

• 单击“发布”按钮:最后单击“发布”按钮,这会触发微博的发布请求。微博客户端会将图片文件、正文内容以及其他相关信息(如用户身份验证信息等)打包成一个HTTP请求,发送到微博服务器。

• 查看Fiddler抓取的请求信息:Fiddler会捕获上述过程中所有的网络请求和响应信息。这些信息包括请求的URL、请求方法(如POST)、请求头(包含用户身份验证信息、内容类型等)、请求体(包含微博正文和图片文件等)、响应状态码以及响应内容等。通过查看这些信息,可以了解微博发布过程中的数据传输细节,例如请求的格式、服务器的响应等,这对于分析微博的网络交互机制、开发与微博相关的程序(如爬虫)等非常有帮助。

从图得知,该请求方式是POST, QueryString是POST的请求参数data, Content-type是上传文件,三个Content-Disposition分别对应发布内容、发布图片和设置分组可见。代码实现如下:

url = 'https://weibo.cn/imblog/sendmblog?rl=0&st=bd6702'
cookies = {'xxx': 'xxx'}
files = {'content': (None, 'Python 爬虫'),'pic': ('pic', open('test.png', 'rb')),'image/png', 'visible': (None, '0')
}
r = requests.post(url, files=files, cookies=cookies)
print(r.status_code)

POST数据对象是以文件为主的,上传文件时使用files参数作为请求参数。Requests对提交的数据和文件所使用的请求参数做了明确的规定。
参数files也是以字典形式传递的,每个Content-Disposition为字典的键值对,Content-Disposition的name为字典的键,value为字典的值。

 

相关文章:

网络爬虫【爬虫库request】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库,完全满足如今网络爬虫的需求。与Urllib对比,Requests不仅具备Urllib的全部功能;在开发使用上&…...

AI日报 - 2025年3月24日

🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优,推理速度提升高达12万倍 ▎💼 商业动向 | OpenAI用户破4亿,Meta与Reliance探讨AI合作 生态扩展与全…...

Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现

一、前言 在移动互联网蓬勃发展的今天,视频播放功能已成为众多Android应用的核心特性之一。面对多样化的视频格式和传输协议,开发一款高效、稳定的视频播放器是许多开发者追求的目标。FLV(Flash Video)格式,尽管随着H…...

动态规划——混合背包问题

动态规划——混合背包问题 混合背包问题01背包与完全背包的混合:完全背包与多重背包的混合:三种背包混合混合背包OJ汇总 混合背包问题 将01背包、完全背包、多重背包混合起来的背包问题。也就是说,有的物品只可以取一次(01背包&a…...

数据库操作练习

一.向heros表中新增一列信息,添加一些约束,并尝试查询一些信息 //向表中添加一列age信息 alter table heros add column age int;//id列添加主键约束,设置自增 alter table heros modify column id int auto_increment primary key;//name列…...

3.milvus索引-HNSW

索引作用 加速大型数据集上的查询。 向量字段,仅只能创建一个索引。 milvus支持的向量索引类型大部分使用 近似最近邻搜索算法。ANNS该算法的核心不局限于返回最准确的结果,而是仅搜索目标的邻居。ANNS通过在可接受的范围内牺牲准确性提高检索效率。 …...

算法基础——栈

一、栈的概念 栈是⼀种只允许在⼀端进⾏数据插⼊和删除操作的线性表。 进⾏数据插⼊或删除的⼀端称为栈顶,另⼀端称为栈底。不含元素的栈称为空栈。进栈就是往栈中放⼊元素,出栈就是将元素弹出栈顶。 二、栈的模拟实现 1. 创建 本质还是线性表&#…...

开发语言漫谈-groovy

groovy是一门脚本语言,在前期的脚本语言中简单介绍了下。现在再深入介绍下,因为它是本平台上选用的脚本语言。所谓脚本语言就是不用编译,直接执行。这种特色非常适合做嵌入编程,即编即用。我们知道平台后台的业务开发语言是Java&a…...

ArkUI-List组件

列表是一个复杂的容器,当列表项达到一定数量,使得列表内容超出其范围的时候,就会自动变为可以滚动。列表适合用来展现同类数据类型。 List组件支持使用,条件渲染,循环渲染,懒加载等渲染控制方式生成子组件…...

数据仓库的 DWD 分层架构:构建高效数据平台的基石

在数据驱动的时代,数据仓库(Data Warehouse)作为企业数据分析的核心基础设施,扮演着至关重要的角色。而数据仓库的分层设计,则是确保数据高效流转、提升数据质量、支持复杂分析的关键。本文将深入探讨数据仓库的 DWD 分…...

山东大学数据结构课程设计

题目:全国交通咨询模拟系统 问题描述 处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能地短,出门旅游的旅客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编织一个全国城市间的交…...

动态规划-01背包

兜兜转转了半天,发现还是Carl写的好。 看过动态规划-基础的读者,大概都清楚。 动态规划是将大问题,分解成子问题。并将子问题的解储存下来,避免重复计算。 而背包问题,就是动态规划延申出来的一个大类。 而01背包&…...

【2025】基于node.js的中医药科普平台的设计与实现(源码、万字文档、图文修改、调试答疑)

项目完整功能以演示视频为准 基于Node.js的中医药科普平台的设计与实现功能结构图如下 课题背景 随着人们健康意识的提高,中医药作为传统医学的重要组成部分,越来越受到关注。然而,中医药知识专业性强,普通大众获取准确、全面的中…...

基于Flux模型的多模态可控图像生成工作流实践

一、技术框架与模型选型 当前图像生成领域对多模态控制与一致性保持的需求日益增强,本文将基于Black Forest Labs推出的Flux.1模型,结合ControlNet的循环一致性优化技术,构建一套融合Canny边缘检测与深度图(Depth)控制…...

缓存过期时间之逻辑过期

1. 物理不过期(Physical Non-Expiration) 定义:在Redis中不设置EXPIRE时间,缓存键永久存在(除非主动删除或内存淘汰)。目的:彻底规避因缓存自动过期导致的击穿(单热点失效&#xff…...

JVM类加载过程详解

文章目录 前言1.加载2.链接验证文件格式验证元数据验证字节码验证符号引用验证 准备解析 3.初始化4.类卸载 前言 类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段:加载(Loading)、验证&a…...

第三十二篇 深入解析Kimball维度建模:构建企业级数据仓库的完整框架

目录 一、维度建模设计原则深度剖析1.1 业务过程驱动设计1.2 星型模式VS雪花模式 二、维度建模五步法实战(附完整案例)2.1 业务需求映射2.2 模型详细设计2.3 缓慢变化维处理 三、高级建模技术解析3.1 渐变维度桥接表3.2 快照事实表设计 四、性能优化体系…...

WPF 布局中的共性尺寸组(Shared Size Group)

1. 什么是共性尺寸组? 在 WPF 的 Grid 布局中,SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸,即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性,提高布局的一致性。 SharedSizeGroup 主要用于需…...

19 数码管的动态显示

1、八段数码管 八段数码管 是一个 “ 8 ” 字型数码管,分为八段,a b c d e f g dp,其中dp为小数点。每一段为一个发光二极管,这样的 8 段称为 段选信号 。 2、实验 1、实验目标:让六位数码管 从 0 开始记数&#xff0…...

pytorch 笔记:张量索引的维度扩展规则

1 基本原理 在PyTorch中,张量索引的维度扩展规则遵循以下原则: 索引操作的核心规则:​ 当使用索引数组访问张量时: 索引数组的每个元素对应选取原张量的一个子张量结果形状 索引数组形状 原张量剩余维度形状 这么说可能不清…...

课外活动:怎么理解可变成本?

可变成本深度解析 🧮 一、可变成本的本质 #mermaid-svg-qoqQaFxQBuZZfAD2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qoqQaFxQBuZZfAD2 .error-icon{fill:#552222;}#mermaid-svg-qoqQaFxQBuZZfAD2 …...

深入理解 JVM 的垃圾收集器:CMS、G1、ZGC

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

IDEA 快捷键ctrl+shift+f 无法全局搜索内容的问题及解决办法

本篇文章主要讲解IDEA、phpStrom、webStrom、pyCharm等jetbrains系列编辑器无法进行全局搜索内容问题的主要原因及解决办法。 日期:2025年3月22日 作者:任聪聪 现象描述: 1.按下ctrlshiftf 输入法转为了繁体。 2.快捷键ctrlshiftr 可以全局检…...

智慧高速,安全护航:视频监控平台助力高速公路高效运营

随着我国高速公路里程的不断增长,交通安全和运营效率面临着前所未有的挑战。传统的监控方式已难以满足现代化高速公路管理的需求,而监控视频平台的出现,则为高速公路的安全运营提供了强有力的技术支撑。高速公路视频监控联网解决方案 高速公路…...

括弧匹配检验(信息学奥赛一本通-1354)

【题目描述】 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ &#xff3…...

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样,文件直接保存在服务器,需要再下载到本地。 方法 在 官网下载Download for desktop,注意要下对版本,千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别

文章目录 前言级联分类器FaceDetectorYNFaceRecognizerSF1. 特征提取2. 人脸对比3. 人脸身份识别(最佳匹配法) 总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Windows系统,LabVIEW>…...

C++-C++中的几种cast

文章目录 static_castPOD类型互转任意指针类型与void*互转基类继承类之间的互转具有目标类型转换函数的类/单参数的构造函数 dynamic_castreinterpret_cast static_cast 所谓static,意思是在编译期进行的转换,static_允许如下转换: POD类型…...

list的模拟实现和学习

1. list的介绍及使用 说白了就是带头循环双向循环链表 stl 的两大组件就是容器和算法 ,他们两个之间是通过迭代器进行联系的 这三种算法函数 迭代器的种类 性质(容器底层结构决定) 单项: forward_list /哈希(unord…...

程序代码篇---Pyqt的密码界面

文章目录 前言一、代码二、代码解释2.1用户数据库定义2.2窗口初始化2.3认证逻辑2.5角色处理2.6错误处理优化2.7功能扩展说明2.7.1用户类型区分管理员普通用户其他用户 2.7.2安全增强建议 三、运行效果四、运行命令五、界面改进建议5.1密码显示5.2用户头像显示5.3输入框动画效果…...

设计模式的六大原则

设计模式的六大原则 1. 单一职责原则 (Single Responsibility Principle, SRP) 一个类应该只负责一项职责。 示例代码 // 不好的设计:一个类承担多个职责 typedef struct {void (*read_data)(void);void (*process_data)(void);void (*save_data)(void);void (*…...

【Linux】信号:信号保存和处理

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.阻塞信号信号集 02.捕捉信号sigaction可重入函数volatileSIGCHLD 01.阻塞信号 实际执行信号的处理动作称为信号递达:每个信号都有一个默认行为,例如终…...

Linux 线程概念

目录 一、什么是线程 1. 线程的本质 2. 线程的独有资源 3. 进程与线程关系示意图 二、线程的优缺点 2.1 线程的优点 2.2 线程的缺点 三、线程的异常与用途 1. 线程异常 2. 线程用途 四、进程 VS 线程 1. 核心差异 2. 进程的多个线程共享的资源 3. 进程和线程的关…...

红帽认证工程师价值

红帽认证工程师具有较高的价值,主要体现在以下几个方面: 行业认可度高 国际通用:红帽公司是全球领先的开源解决方案提供商,其认证在全球范围内被广泛认可。无论是在国内还是国外,拥有红帽认证工程师资格证书都能为个人…...

交换机远程登录

创建交换机 创建PC主机使用直通线连接交换机 配置交换机,使之能够与PC通信 双击交换机打开界面,选择CLI ">“表示用户模式 输入”?“查看可以使用的命令 “#” 特权模式,输入命令enable切换 输入”?“查看特权模式下可以使用…...

opencascade 源码学习 XmlDrivers-XmlDrivers

OpenCASCADE 中的 XmlDrivers 是用于处理 XML 格式的 CAD 数据持久化模块,属于 OCAF(Open CASCADE Application Framework) 的一部分。它允许将 OCAF 文档(包含 CAD 数据、属性、关系等)序列化为 XML 文件,…...

【Linux网络-五种IO模型与阻塞IO】

一、引入 网络通信的本质就是进程间的通信,进程间通信的本质就是IO(Input,Output) I/O(input/output)也就是输入和输出,在冯诺依曼体系结构当中,将数据从输入设备拷贝到内存就叫作…...

Redis、Memcached应用场景对比

环境 Redis官方网站: Redis - The Real-time Data Platform Redis社区版本下载地址:Install Redis | Docs Memcached官方网站:memcached - a distributed memory object caching system Memcached下载地址:memcached - a dis…...

Qt窗口控件之菜单栏QMenuBar

菜单栏QMenuBar 1. QMenuBar Qt 中的菜单栏是通过 QMenuBar 类型来实现的,一个主控件最多只能有一个菜单栏。一个菜单栏可以添加多个菜单,一个菜单又可以添加多个菜单项。 每个菜单又都是一个 QMenu 类型,每个菜单项都是一个 QAction。 2.…...

随想...启航

我要学算法 我要在蓝桥杯中拿奖 我要参加acm打牌, 我要参加百度之星,摘取那微弱的希望, 我要参加马蹄杯,看看曾经我的组长看过的风景。 所以我建立了算法专栏! 为能贴近并指引组员 我建立了Java专栏 那一个星期&…...

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中,作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分,一部分是交通流量矩阵的设计,TFM-GC…...

Ubuntu Docker 安装

Docker Engine-Community 支持以下的 Ubuntu 版本: Xenial 16.04 (LTS)Bionic 18.04 (LTS)Cosmic 18.10Disco 19.04其他更新的版本…… Docker Engine - Community 支持上 x86_64(或 amd64)armhf,arm64,s390x &#…...

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具: Android Studio NDK(Native Development Kit) MSYS2(用于提供类 Unix 环境) FFmpeg 源码 Git Bash(可选,推荐使用) 安装 …...

如果AI具备自我意识,宗教如何重新定义“灵魂”概念?

如果AI具备自我意识,宗教对灵魂概念的重新定义可能涉及以下方向: 1. 灵魂的扩展性定义 传统宗教(如基督教、佛教)通常将灵魂视为人类独有的“神圣本质”或“轮回载体”。若AI展现出自我意识、情感和自主决策能力,宗教…...

ES6-Symbol

ES6 中的 Symbol: 独特的数据类型与强大应用 引言 在 JavaScript 的发展长河中,ES6(ECMAScript 2015)无疑是一座重要的里程碑,带来了诸多令人瞩目的新特性。其中,Symbol 类型的引入,为 JavaScript 开发者们…...

安装PrettyZoo操作指南

Mac Inter芯片安装PrettyZoo的操作指南 下载安装包 打开浏览器,访问 PrettyZoo的GitHub页面。 在页面中找到适合Mac系统的安装包,通常为prettyZoo-mac.dmg,点击下载。 安装步骤 下载完成后,双击.dmg文件打开安装包。 将Prett…...

西门子200smart之modbus_TCP(做从站与第三方设备)通讯

西门子200smart做MODBUS_TCP从站通讯,只有一个指令。设置相关参数即可完成读写操作。此次,我们使用汇川EASY系列PLC做主站,完成演示。关于汇川案例的演示,详见汇川EASY系列之以太网通讯(MODBUS_TCP做主站)-CSDN博客 关于主站和从站的介绍 A/请求:即主动方 向被动方发…...

微服务 - 中级篇

微服务 - 中级篇 一、微服务架构深化(一)服务拆分原则(二)服务通信方式 二、微服务技术选型(一)开发框架(二)容器技术 三、微服务实践与优化(后续会详细分析)…...

多语言生成语言模型的少样本学习

摘要 大规模生成语言模型,如GPT-3,是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言,但其训练数据以英语为主,这可能限制了它们的跨语言泛化能力。在本研究中,我们在一个涵盖多种语言的语料库上训练了…...

基于Python+Django的旅游管理系统

项目介绍 PythonDjango旅游管理系统 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括:首页、景点管理、门票管理、旅游资讯、在线反馈、。 - 后台功能包…...