Python爬虫(一)- Requests 安装与基本使用教程
文章目录
- 前言
- 一、简介及安装
- 1. 简介
- 2. 安装 Requests
- 2.1 安装
- 2.2 检查安装是否成功
- 二、使用 Requests 发送 HTTP 请求
- 1. 发送 GET 请求
- 2. 发送 POST 请求
- 3. 发送 PUT 请求
- 4. 发送 DELETE 请求
- 5. 发送 HEAD 请求
- 6. 发送 OPTIONS 请求
- 三、传递参数
- 1. GET 请求传递 URL 参数
- 1.1 使用字典传递单个值
- 1.2 使用字典传递多个相同键的值
- 1.3 忽略值为 None 的键
- 2. POST 请求传递参数
- 2.1 表单编码的数据(application/x-www-form-urlencoded)
- 2.2 JSON 编码的数据(application/json)
- 2.2.1 手动编码
- 2.2.2 使用 json 参数
- 2.3 上传文件(multipart/form-data)
- 2.3.1 使用 files 参数上传文件
- 四、响应内容
- 1. 文本响应内容
- 2. 二进制响应内容
- 3. JSON 响应内容
- 4. 原始响应内容
- 五、定制请求头
- 六、响应
- 1. 响应状态码
- 2. 响应头
- 3. Cookie
- 3.1 获取服务器响应的 Cookie
- 3.2 向服务器发送 Cookie
- 3.2.1 使用 cookies 参数传递一个字典
- 4. 重定向
- 4.1 查看重定向历史记录
- 4.2 禁用重定向
- 4.3 启用 HEAD 请求的重定向
- 5. 超时
- 6. 错误与异常
前言
本篇文章将详细介绍 requests 库的基本用法,包括安装、发送请求、处理响应、传递参数等内容。通过这些内容,读者将能够掌握如何使用 requests 库进行高效的网络请求,从而为后续的项目开发打下坚实的基础。希望本文能帮助您更好地理解和应用 requests 库,提升您的 Python 编程技能。
一、简介及安装
1. 简介
requests
是一个用于发送HTTP请求的Python库,它简化了与Web服务交互的过程,使开发者能够轻松地构建和解析HTTP请求和响应。其简洁易用的API设计使得即使是初学者也能快速上手。
使用版本:
python | requests | |
---|---|---|
版本 | 3.8.5 | 2.31.0 |
2. 安装 Requests
2.1 安装
最简单的方法是通过Python的包管理工具pip
来安装requests
。
执行如下命令安装requests 2.31.0
。
pip install requests==2.31.0 -i https://mirrors.aliyun.com/pypi/simple/
2.2 检查安装是否成功
执行如下命令查看requests
是否安装成功。
pip show requests
安装成功如下图所示。
二、使用 Requests 发送 HTTP 请求
1. 发送 GET 请求
import requestsurl = 'http://httpbin.org/get'response = requests.get(url=url)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
2. 发送 POST 请求
import requestsurl = 'http://httpbin.org/post'
payload = {'key': 'value'}response = requests.post(url=url, data=payload)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
3. 发送 PUT 请求
import requestsurl = 'http://httpbin.org/put'
payload = {'key': 'value'}response = requests.put(url=url, data=payload)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
4. 发送 DELETE 请求
import requestsurl = 'http://httpbin.org/delete'response = requests.delete(url=url)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
5. 发送 HEAD 请求
HEAD
请求是一种 HTTP 方法,它与 GET
请求类似,但服务器在响应中只返回头部信息而不包含消息体。这意味着你可以获取关于资源的信息(如状态码、内容类型、最后修改时间等)而无需下载整个资源。这对于检查链接的有效性或获取元数据非常有用。
import requestsurl = 'http://httpbin.org/get'response = requests.head(url=url)# 打印服务器响应
print(response.text)
6. 发送 OPTIONS 请求
OPTIONS
请求是一种 HTTP 方法,用于描述目标资源所支持的通信选项。它通常用来检查服务器对于特定URL支持哪些HTTP方法(如 GET, POST, PUT, DELETE 等),以及获取其他关于如何与资源交互的信息。
在跨域资源共享 (CORS) 的场景中,浏览器会在发送非简单请求(例如带有自定义头部信息或使用某些HTTP动词)之前自动发出 OPTIONS
预检请求,以确保服务器允许即将进行的实际请求。这种预检机制是 CORS 安全模型的一部分,用以防止可能的跨站脚本攻击 (XSS)。
import requestsurl = 'http://httpbin.org/get'response = requests.options(url=url)# 打印服务器响应
print(response.text)
三、传递参数
1. GET 请求传递 URL 参数
当你想要为URL的查询字符串(query string)添加数据时,你可以使用 params
关键字参数来提供这些参数。params
接受一个字典或包含键值对的列表,这些键值对会被编码到URL中,跟在问号(?)后面。
1.1 使用字典传递单个值
如果你想传递单个键值对,可以使用一个Python字典作为 params
的值。例如,要传递 key1=value1
和 key2=value2
到 www.baidu.com/get
,可以这样做:
import requests# 定义URL地址
url = 'https://www.baidu.com/get'# 定义要传递的参数
payload = {'key1': 'value1', 'key2': 'value2'}# 发送GET请求并附带参数
response = requests.get(url=url, params=payload)# 打印出构建的URL
print(response.url)
打印出构建的URL为:
https://www.baidu.com/get?key1=value1&key2=value2
1.2 使用字典传递多个相同键的值
有时可能需要为同一个键传递多个值。在这种情况下,可以将值作为列表传递:
import requests# 定义URL地址
url = 'https://www.baidu.com/get'# 定义要传递的参数
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}# 发送GET请求并附带参数
response = requests.get(url=url, params=payload)# 打印出构建的URL
print(response.url)
打印出构建的URL为:
https://www.baidu.com/get?key1=value1&key2=value2&key2=value3
1.3 忽略值为 None 的键
如果在字典中包含值为 None
的键,这些键不会被添加到URL的查询字符串中。例如:
import requests# 定义URL地址
url = 'https://www.baidu.com/get'# 定义要传递的参数
payload = {'key1': 'value1', 'key2': None}# 发送GET请求并附带参数
response = requests.get(url=url, params=payload)# 打印出构建的URL
print(response.url)
打印出构建的URL为:
https://www.baidu.com/get?key1=value1
2. POST 请求传递参数
2.1 表单编码的数据(application/x-www-form-urlencoded)
当需要发送类似于 HTML 表单的数据时,可以简单地向 data
参数传递一个字典。这些数据会在发出请求时自动编码为表单形式。
import requests# 定义要发送的POST请求的URL
url = 'http://httpbin.org/post'# 定义要传递的参数
payload = {'key1': 'value1', 'key2': 'value2'}# 发送POST请求并附带参数
response = requests.post(url=url, data=payload)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
如果有多个值对应同一个键,可以传递一个元组列表:
import requests# 定义要发送的POST请求的URL
url = 'http://httpbin.org/post'# 多个相同键的值作为元组列表传递
payload = [('key1', 'value1'), ('key1', 'value2')]# 发送POST请求并附带参数
response = requests.post(url=url, data=payload)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
2.2 JSON 编码的数据(application/json)
对于 API 请求,通常接受 JSON 编码的数据。有两种方式可以做到这一点。
2.2.1 手动编码
使用 json.dumps()
方法将字典转换为 JSON 字符串,并将其传递给 data
参数。
import requests
import json# 定义要发送的POST请求的URL
url = 'http://httpbin.org/post'# 定义要传递的参数
payload = {'key1': 'value1'}# 发送POST请求并附带参数
response = requests.post(url=url, data=json.dumps(payload))# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
2.2.2 使用 json 参数
直接传递字典给 json
参数,它会自动处理编码。
import requests# 定义要发送的POST请求的URL
url = 'http://httpbin.org/post'# 定义要传递的参数
payload = {'key1': 'value1'}# 发送POST请求并附带参数
response = requests.post(url=url, json=payload)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
2.3 上传文件(multipart/form-data)
2.3.1 使用 files 参数上传文件
上传文件只需要定义一个字典,其中键是表单字段名,值是一个文件对象或包含文件内容的字符串。如果需要,还可以指定文件名、MIME 类型和额外的请求头。
import requests# 定义要发送的POST请求的URL
url = 'http://httpbin.org/post'# 上传文件示例
files = {'file': open('D:\\demo.xls', 'rb')}
response = requests.post(url=url, files=files)
# 指定文件名、类型和额外头部
# files = {'file': ('demo.xls', open('D:\\demo.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
# response = requests.post(url, files=files)
# 发送字符串作为文件
# files = {'file': ('demo.csv', 'v1,v2,v3,v4\nv5,v6,v7,v8\n')}
# response = requests.post(url, files=files)# 打印服务器响应
print(response.text)
打印服务器响应的结果为:
四、响应内容
1. 文本响应内容
在与服务器交互后,可以读取其返回的内容。
requests
库会自动处理从服务器接收的数据解码。
自动解码:requests
会基于 HTTP 头部信息对响应编码作出推测,并使用response.text
访问时自动解码。
修改编码:可以通过response.encoding
属性来查看或改变推测的编码方式。
import requestsurl = 'https://api.github.com/events'response = requests.get(url=url)# 打印文本响应内容
print(response.text)
# 查看推测的文本编码
print(response.encoding)# 修改编码方式并打印文本响应内容
response.encoding = 'ISO-8859-1'
print(response.text)
打印的结果为:
2. 二进制响应内容
对于非文本类型的响应,比如图片、文件等,应该使用 response.contentt
来访问原始的字节数据。requests
自动处理 gzip
和 deflate
编码的响应。
import requestsurl = 'https://img3.doubanio.com/view/photo/m_ratio_poster/public/p480747492.jpg'response = requests.get(url=url)# 打印二进制响应内容
print(response.content)
打印的结果为:
3. JSON 响应内容
对于 JSON 数据,requests
提供了内置的 JSON 解码器。
import requestsurl = 'https://jsonplaceholder.typicode.com/posts'response = requests.get(url=url)# 打印响应头部中的 'content-type' 字段值,以确认服务器返回的内容类型
print(response.headers.get('content-type'))# 将响应内容解析为 JSON 格式,并存储在变量 json_data 中
json_data = response.json()# 打印整个 JSON 数据列表
print(json_data)# 打印第一个帖子的所有键名
print(json_data[0].keys())# 获取并打印第一个帖子的 'userId' 字段的值
print(json_data[0].get('userId'))
打印的结果为:
需要注意的是,成功调用
response.json()
并不意味着 HTTP 请求的成功。要检查请求是否成功,应当检查response.status_code
的返回值是否和期望相同。
import requests# 发送 GET 请求以获取特定提交的信息
response = requests.get('https://api.github.com/repos/requests/requests/git/commits/a050faf084662f3a352dd1a941f2c7c9f886d4ad')# 检查响应状态码是否为 200 (OK)
if response.status_code == requests.codes.ok:# 打印内容类型print(response.headers['content-type'])# 解析 JSON 数据并打印部分信息commit_data = response.json()print(commit_data.keys())print(commit_data['committer'])print(commit_data['message'])
打印的结果为:
application/json; charset=utf-8
dict_keys(['sha', 'node_id', 'url', 'html_url', 'author', 'committer', 'tree', 'message', 'parents', 'verification'])
{'name': 'Kenneth Reitz', 'email': 'me@kennethreitz.com', 'date': '2012-05-10T18:10:50Z'}
makin' history
makin' history
json.load(fp)
: 从文件对象 fp 读取 JSON 数据,并将其解析为 Python 对象。
json.loads(s)
: 从字符串 s 读取 JSON 数据,并将其解析为 Python 对象。
json.dump(obj, fp)
: 将 Python 对象 obj 转换为 JSON 格式,并写入文件对象 fp。
json.dumps(obj)
: 将 Python 对象 obj 转换为 JSON 格式的字符串。
4. 原始响应内容
在特殊情况下,可能需要获取来自服务器的原始套接字响应。这需要确保在初始请求中设置了 stream=True
。
import requestsurl = 'https://api.github.com/events'response = requests.get(url=url, stream=True)# 打印原始响应对象
print(response.raw)
打印的结果为:
<urllib3.response.HTTPResponse object at 0x0000013F42A42D60>
通常,推荐使用 Response.iter_content()
方法来流式处理大文件下载,而不是直接操作 Response.raw
。
import requests# 定义要请求的 URL
url = 'https://api.github.com/events'# 发送 GET 请求到指定的 URL,使用 stream=True 以便逐块下载内容
response = requests.get(url=url, stream=True)# 打开一个文件以写入二进制数据,路径为 'D:\\demo.txt'
with open('D:\\demo.txt', 'wb') as fd:# 遍历响应内容,按块读取数据,块大小为 8192 字节for chunk in response.iter_content(chunk_size=8192):# 将读取的块写入文件fd.write(chunk)
五、定制请求头
如果想为请求添加 HTTP 头部信息,只需要传递一个字典给 headers
参数就可以。
import requestsurl = 'https://api.github.com/some/endpoint'# 定制请求头
headers = {'user-agent': 'my-app/0.0.1'}
response = requests.get(url, headers=headers)print(response.text)
打印的结果为:
{"message":"Not Found","documentation_url":"https://docs.github.com/rest","status":"404"}
注意事项:
- 如果在 .netrc 中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了 auth= 参数,
.netrc
的设置就无效了。 - 如果被重定向到别的主机,授权 header 就会被删除。
- 代理授权 header 会被 URL 中提供的代理身份覆盖掉。
- 在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。
六、响应
1. 响应状态码
在使用 requests
库发送 HTTP 请求后,可以通过 Response.status_code
属性来检查服务器返回的状态码。这可以帮助我们了解请求是否成功完成或发生了什么类型的错误。
import requestsurl = 'http://httpbin.org/get'response = requests.get(url=url)# 打印响应状态码
print(response.status_code)
打印的响应状态码为:
200
为了方便引用和比较,requests
提供了一个内置的状态码查询对象 requests.codes
,它包含了所有标准的 HTTP 状态码作为属性。
import requestsurl = 'http://httpbin.org/get'response = requests.get(url=url)# 打印响应结果
print(response.status_code == requests.codes.ok)
打印的结果为:
True
如果请求导致了客户端(4XX)或服务器端(5XX)错误,我们可以使用 Response.raise_for_status()
方法来抛出异常。
import requestsurl = 'http://httpbin.org/status/404'response = requests.get(url=url)# 打印响应状态码
print(response.status_code)
print(response.raise_for_status())
打印结果如下图所示:
当请求成功时(如状态码为 200),调用 raise_for_status()
不会做任何事情,表示一切正常。
import requestsurl = 'http://httpbin.org/get'response = requests.get(url=url)# 打印响应状态码
print(response.status_code)
print(response.raise_for_status())
打印的结果为:
200
None
2. 响应头
通过 Response.headers
属性可以查看以 Python 字典形式展示的服务器响应头信息。这个字典是专门为 HTTP 头部设计的,并且大小写不敏感,允许使用不同的大小写形式来访问相同的头部字段。
import requestsurl = 'http://httpbin.org/get'response = requests.get(url=url)# 打印服务器响应的所有头部信息
print(response.headers)
# 直接通过键访问headers字典,如果键不存在则会抛出KeyError异常。
print(response.headers['content-type'])
# 如果键不存在,则不会抛出异常,默认返回None,也可以通过传递第二个参数来设置默认返回值。
print(response.headers.get('content-type'))
# 如果键不存在,返回test。
print(response.headers.get('demo', 'test'))
打印的结果为:
{'Date': 'Sat, 28 Dec 2024 11:57:39 GMT', 'Content-Type': 'application/json', 'Content-Length': '307', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
application/json
application/json
test
3. Cookie
3.1 获取服务器响应的 Cookie
import requestsurl = 'http://www.baidu.com'response = requests.get(url=url)# 打印服务器响应的所有cookie
print(response.cookies)
# 打印从服务器响应中获取到的名为 'H_PS_PSSID' 的 cookie 的值。
# 如果不存在名为 'H_PS_PSSID' 的 cookie,则会抛出 KeyError 异常。
print(response.cookies['H_PS_PSSID'])
# 如果 cookie 不存在,它将返回 None 或者指定的默认值,而不会抛出异常
print(response.cookies.get('H_PS_PSSID'))
# 如果 cookie 不存在,返回指定的值
print(response.cookies.get('example_cookie_name', 'test_cookie'))
打印的结果为:
<RequestsCookieJar[<Cookie BAIDUID=627BEA4A34524A3DBC559E2D5C068A8A:FG=1 for .baidu.com/>, <Cookie BAIDUID_BFESS=627BEA4A34524A3DBC559E2D5C068A8A:FG=1 for .baidu.com/>, <Cookie BIDUPSID=627BEA4A34524A3DBC559E2D5C068A8A for .baidu.com/>, <Cookie H_PS_PSSID=61027_61216_61429_61444_60853_61508_61518_61524_61538_61362_61607_61627 for .baidu.com/>, <Cookie PSTM=1735387988 for .baidu.com/>, <Cookie BDSVRTM=7 for www.baidu.com/>, <Cookie BD_HOME=1 for www.baidu.com/>]>
61027_61216_61429_61444_60853_61508_61518_61524_61538_61362_61607_61627
61027_61216_61429_61444_60853_61508_61518_61524_61538_61362_61607_61627
test_cookie
3.2 向服务器发送 Cookie
要向服务器发送 cookie,可以使用 cookies
参数传递一个字典或者直接传递一个 RequestsCookieJar
对象。
3.2.1 使用 cookies 参数传递一个字典
import requestsurl = 'http://httpbin.org/cookies'cookies = dict(cookies_are='working')
# cookies = {'cookies_are': 'working'}response = requests.get(url=url, cookies=cookies)print(response.text)
打印的结果为:
{"cookies": {"cookies_are": "working"}
}
4. 重定向
默认情况下,除了 HEAD 请求外,requests
会自动处理所有的重定向。可以使用 Response.history
来追踪重定向的历史记录,它是一个按照从最老到最近排序的 Response
对象列表。
4.1 查看重定向历史记录
GitHub 会将所有 HTTP 请求重定向到 HTTPS。
import requestsurl = 'http://github.com'response = requests.get(url=url)
# 打印url
print(response.url)
# 打印重定向记录
print(response.history)
打印的结果为:
https://github.com/
[<Response [301]>]
从打印结果可以看到 github 的 http 请求被重定向到了 https。
4.2 禁用重定向
可以通过设置 allow_redirects=False
来禁用自动重定向处理。
import requestsurl = 'http://github.com'# 设置 allow_redirects=False,表示禁用重定向
response = requests.get(url=url, allow_redirects=False)print(response.url)
print(response.status_code)
print(response.history)
打印的结果为:
http://github.com/
301
[]
4.3 启用 HEAD 请求的重定向
对于 HEAD 请求,默认情况下不会跟随重定向,可以显式地启用它。
import requestsurl = 'http://github.com'# 设置 allow_redirects=True,表示启用重定向
response = requests.head(url=url, allow_redirects=True)print(response.url)
print(response.history)
打印的结果为:
https://github.com/
[<Response [301]>]
5. 超时
为了避免程序因等待响应而无限期挂起,可以使用 timeout
参数指定一个超时时间(以秒为单位)。如果服务器在这个时间内没有响应,requests
将抛出一个 Timeout
异常。
import requestsurl = 'http://github.com'response = requests.get(url=url, timeout=0.001)
6. 错误与异常
当遇到网络问题(如 DNS 查询失败、拒绝连接等)时,requests
会抛出 ConnectionError
异常。如果 HTTP 请求返回了不成功的状态码,Response.raise_for_status()
会抛出 HTTPError
异常。其他可能抛出的异常包括但不限于 Timeout
(请求超时)、TooManyRedirects
(超过最大重定向次数)。所有由 requests
显式抛出的异常都继承自 requests.exceptions.RequestException
。
相关文章:

Python爬虫(一)- Requests 安装与基本使用教程
文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…...

线段树保姆级教程
买水果 Description 水果姐今天心情不错,来到了水果街。 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样。 学过oi的水果姐迅速发现了一个赚钱的方法:…...

logback之自定义过滤器
logback有两种过滤器,一种是context中的过滤器叫TurboFilter,是一个全局的过滤器,会影响所有的日志记录。另一种是Appender中的过滤器,只对所在的append有效。两者大同小异,这里我们以Appender的过滤器为例。 &#x…...

如何用CSS3创建圆角矩形并居中显示?
在网页设计中,圆角矩形因其美观和现代感而被广泛使用,居中显示元素也是一个常见的需求。今天,我们将学习如何使用CSS3的border-radius属性来创建圆角矩形,并将其居中显示在页面上。 如果你正在学习CSS,那么这个实例将非…...

Java 开发中的指定外部 Jar 路径详解
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…...

python爬虫--小白篇【selenium自动爬取文件】
一、问题描述 在学习或工作中需要爬取文件资源时,由于文件数量太多,手动单个下载文件效率低,操作麻烦,采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件,并将其转为Markdown格式。…...

TI毫米波雷达原始数据解析之Lane数据交换
TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…...

overscroll-behavior-解决H5在ios上过度滚动的默认行为
1. 问题 开发H5的过程中,经常会有android和ios两边系统需要兼容的情况。在ios上一直有个问题是当H5内容触及到页面顶部或底部时,还是可以被人为的往下或往下拉动界面。当然可能有的情况是比较适用的,比如你往下拉动,然后在导航栏…...

Nacos配置中心总结
Nacos配置中心总结 Nacos配置文件的加载顺序和优先级 加载顺序 nacos作为配置中心时,需要在bootstrap.yml文件中添加nacos config相关的配置,这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。 bootstrap.ym…...

rouyi(前后端分离版本)配置
从gitee上下载,复制下载地址,到 点击Clone,下载完成, 先运行后端,在运行前端 运行后端: 1.配置数据库,在Navicat软件中,连接->mysql->名字自己起(rouyi-vue-blog),用户名roo…...

超大规模分类(一):噪声对比估计(Noise Contrastive Estimation, NCE)
NCE损失对应的论文为《A fast and simple algorithm for training neural probabilistic language models》,发表于2012年的ICML会议。 背景 在2012年,语言模型一般采用n-gram的方法,统计单词/上下文间的共现关系,比神经概率语言…...

Windows 下安装 triton 教程
目录 背景解决方法方法一:(治标不治本)方法二:(triton-windows)- 安装 MSVC 和 Windows SDK- vcredist 安装- whl 安装- 验证 背景 triton 目前官方只有Linux 版本,若未安装,则会出…...

复盘与导出工具最新版9.15重磅发布-全新UI兼容所有windows系统
在9.11版本的基础上大更新: 1.应付费用户需求修复当更换明亮风格时软件超过电脑屏幕的bug!!!!! 2.支持所有windows版本,32/64位的win xp/7/8/10/11 3.修复开盘啦涨停原因排序bug 4.全新ui风格 5提前爆料:.9.2版本的分开…...

家用电器销售系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

NRF24L01模块通信实验
NRF24L01简要介绍 这里主要介绍模块的最重要的参数,废话就不多介绍了。 该模块是一款无线通信模块,一个模块即可同时具备发射和接收数据的功能,但是要想实现通信必须使用两个模块之间才能进行通信。NRF24L01模块使用的总线控制方式为SPI总…...

2024年12月CCF-GESP编程能力等级认证Scratch图形化编程三级真题解析
本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(一共 15 个题目,每题 2 分,共 30 分) 第 1 题 2024 年 10 月 8 日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. …...

【MySQL系列】VARCHAR为啥一般是255
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

图文教程:使用PowerDesigner导出数据库表结构为Word/Html文档
1、第一种情况-无数据库表,但有数据模型 1.1 使用PowerDesigner已完成数据建模 您已经使用PowerDesigner完成数据库建模,如下图: 1.2 Report配置和导出 1、点击:Report->Reports,如下图: 2、点击&…...

Coroutine 基础五 —— Flow 之 Channel 篇
1、Channel 与 Flow 简介与对比 所有知识都可总结为一个字 —— 流。包括数据流、事件流、状态流。 开发中最常用的 StateFlow 提供状态订阅。可以将一些信息包进 StateFlow 中进行保存。比如界面上显示的字符串,或者系统级别的信息,如用户状态。装进 …...

快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang)
Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 1、滚动查询的使用场景 滚动查询区别于上一篇文章介绍的使用from、size分页检索,最大的特点是,它能够检索超过10000条外的…...

C++设计模式:状态模式(自动售货机)
什么是状态模式? 状态模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时,动态改变其行为。通过将状态相关的逻辑封装到独立的类中,状态模式能够将状态管理与行为解耦,从而让系统更加灵活和可维护。 通…...

【网络安全实验室】脚本关实战详情
难道向上攀爬的那条路,不是比站在顶峰更让人热血澎湃吗 1.key又又找不到了 点击链接,burp抓包,发送到重放模块,点击go 得到key 2.快速口算 python3脚本 得到key 3.这个题目是空的 试了一圈最后发现是 4.怎么就是不弹出key呢…...

ts总结一下
ts基础应用 /*** 泛型工具类型*/ interface IProps {id: string;title: string;children: number[]; } type omita Omit<IProps, id | title>; const omitaA: omita {children: [1] }; type picka Pick<IProps, id | title>; const pickaA: picka {id: ,title…...

MySQL数据库笔记——主从复制
大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍 MySQL的主从复制,从原理到配置再到同步过程。 文章目录 简介核心组件主从复制的原理作用主从复制的线程模型主从复制的模式形式复制的方式设计复制机制主从…...

OpenAI发布o3:圣诞前夜的AI惊喜,颠覆性突破还是技术焦虑?
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

欧拉-伯努利梁自由波动的频散关系
梁和杆都是一维结构,但是梁的弯曲波比杆的纵波要复杂多。例如即使最简单的欧拉-伯努利(Euler-Bernoulli)梁的弯曲波也具有频散特征,且当梁的特征尺寸和弯曲波波长满足某个比值时,欧拉-伯努利梁不再适用,需要引入铁摩辛克(Timoshenko)梁模型。 考察某一欧拉-伯努利梁,长度…...

Cursor小试1.生成一个网页的接口请求工具
一般开发过程中,会涉及到接口的调试,往往有时候开发的电脑不是我们自己的,没有安装一些类似postman 的接口调用工具,所以发现问题或者要测试某些接口是否正常的时候会很麻烦,而且现在网上也没有找到很好的免费的网页端接口请求的网址,所以我们使用Cursor来编写这样一个小工具, …...

Xilinx DCI技术
Xilinx DCI技术 DCI技术概述Xilinx DCI技术实际使用某些Bank特殊DCI要求 DCI级联技术DCI端接方式阻抗控制驱动器(源端接)半阻抗控制阻抗驱动器(源端接)分体式DCI(戴维宁等效端接到VCCO/2)DCI和三态DCI&…...

Kubernetes Pod 优雅关闭:如何让容器平稳“退休”?
Kubernetes Pod 优雅关闭:如何让容器平稳“退休”? 在 Kubernetes 中,Pod 是应用的基本单元。你可能会遇到需要停止某个 Pod 或容器的情况,可能是因为要更新、调整或故障恢复。在这种情况下,Pod 的优雅关闭࿰…...

鸿蒙应用开发(1)
可能以为通过 鸿蒙应用开发启航计划(点我去看上一节) 的内容,就足够了,其实还没有。 可是我还是要告诉你,你还需要学习新的语言 -- ArkTS。 ,ArkTS是HUAWEI开发的程序语言。你需要学习这门语言。这会花费你…...