爬虫基本库的使用(httpx库的详细解析)

       前面,已经介绍过了urllib库和requests库( 爬虫基本库的使用(urllib库的详细解析)-CSDN博客爬虫基本库的使用(requests库的详细解析)-CSDN博客),已经可以爬取大多数网站的数据。但对于某些网站依然无能为力 ,因为这些网站强制使用HTTP/2.0协议访问,而urllib库和requests库只支持HTTP/1.1协议。那碰上这种情况应该怎么办呢?只需要使用支持HTTP/2.0协议的请求库不就好了。目前,应用比较广泛的是hyper和httpx。但httpx用起来更方便而且也更强大,requests库的功能它几乎都支持。那么,这里就详细来介绍httpx库吧!!!

目录

httpx库

1、示例

2、安装

3、基本使用 

4、 Client对象


httpx库

1、示例

        下面我们来看一个案例,https://spa16.scrape.center/就是一个强制使用HTTP/2.0协议。采用requests库是无法请求的,不信?我们来试试:

import  requests
url = 'https://spa16.scrape.center/'
response = requests.get(url)
print(response.text)

结果如下:

Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connectionpool.py", line 793, in urlopenresponse = self._make_request(^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connectionpool.py", line 537, in _make_requestresponse = conn.getresponse()^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connection.py", line 466, in getresponsehttplib_response = super().getresponse()^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponseresponse.begin()File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in beginversion, status, reason = self._read_status()^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_statusraise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without responseDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\adapters.py", line 486, in sendresp = conn.urlopen(^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connectionpool.py", line 847, in urlopenretries = retries.increment(^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\util\retry.py", line 470, in incrementraise reraise(type(error), error, _stacktrace)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\util\util.py", line 38, in reraiseraise value.with_traceback(tb)File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connectionpool.py", line 793, in urlopenresponse = self._make_request(^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connectionpool.py", line 537, in _make_requestresponse = conn.getresponse()^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\urllib3\connection.py", line 466, in getresponsehttplib_response = super().getresponse()^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponseresponse.begin()File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in beginversion, status, reason = self._read_status()^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_statusraise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))During handling of the above exception, another exception occurred:Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\爬虫学习\Python知识\01.py", line 3, in <module>response = requests.get(url)^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\api.py", line 73, in getreturn request("get", url, params=params, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\api.py", line 59, in requestreturn session.request(method=method, url=url, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\sessions.py", line 589, in requestresp = self.send(prep, **send_kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\sessions.py", line 703, in sendr = adapter.send(request, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\requests\adapters.py", line 501, in sendraise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

           可以看到,一堆报错。头痛吧!抛出RemoteDisconnected错误,这就是requests库无法请求HTTP/2.0协议的网站。

2、安装

        httpx是需要提前安装的第三方库,所需Python版本是3.6及以上,安装命令如下:

pip install httpx

3、基本使用 

        https:和requests的很多API存在相似之处, 我们先看下最基本的 GET 请求的用法:

import httpx
response = httpx.get('https://www.httpbin.org/get')
print(response. status_code)
print(response. headers)
print(response. text)

        这里我们还是请求之前的测试网站,直接使用httpx的get方法即可, 用法和requests里的一模一样, 将返回结果赋值为response 变量, 然后打印出它的 status_code、headers、text等属性, 运行结果如下:

200
Headers({'date': 'Thu, 22 Feb 2024 03:37:08 GMT', 'content-type': 'application/json', 'content-length': '311', 'connection': 'keep-alive', 'server': 'gunicorn/19.9.0', 'access-control-allow-origin': '*', 'access-control-allow-credentials': 'true'})
{"args": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "www.httpbin.org", "User-Agent": "python-httpx/0.27.0", "X-Amzn-Trace-Id": "Root=1-65d6c164-3cdcebd7381e5873457a6866"}, "origin": "111.72.54.67", "url": "https://www.httpbin.org/get"
}

        输出结果包含三项内容, status_code 属性对应状态码, 为 200; headers 属性对应响应头, 是一个 Headers 对象, 类似于一个字典; text 属性对应响应体, 可以看到其中的 User-Agent 是python-httpx/0.18.1, 代表我们是用 https请求的。下面换一个 User-Agent 再请求一次, 代码改写如下:

import httpx
headers = {'User-Agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36(KHTML, like Gecko)Chrome/90.0.4430.93 Safari/537.36'
}
response = httpx.get('https://www.httpbin.org/get',headers=headers)
print(response. text)

        这里我们换了一个User-Agent 重新请求, 并将其赋值为headers变量,然后传递给 headers 参数,运行结果如下: 

{"args": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "www.httpbin.org", "User-Agent": "Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36(KHTML, like Gecko)Chrome/90.0.4430.93 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-65d6c2c6-0fef57aa6cc8a6fa4f0ea62e"}, "origin": "111.72.54.67", "url": "https://www.httpbin.org/get"
}

        可以发现更换User-Agent生效了!接下来,我们尝试用httpx请求一下这个网站,看看效果如何,代码如下:

import httpx
response = httpx.get('https://spa16.scrape.center/')
print(response.text)

结果如下:

Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_transports\default.py", line 69, in map_httpcore_exceptionsyieldFile "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_transports\default.py", line 233, in handle_requestresp = self._pool.handle_request(req)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\connection_pool.py", line 216, in handle_requestraise exc from NoneFile "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\connection_pool.py", line 196, in handle_requestresponse = connection.handle_request(^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\connection.py", line 101, in handle_requestreturn self._connection.handle_request(request)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\http11.py", line 143, in handle_requestraise excFile "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\http11.py", line 113, in handle_request) = self._receive_response_headers(**kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\http11.py", line 186, in _receive_response_headersevent = self._receive_event(timeout=timeout)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpcore\_sync\http11.py", line 238, in _receive_eventraise RemoteProtocolError(msg)
httpcore.RemoteProtocolError: Server disconnected without sending a response.The above exception was the direct cause of the following exception:Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\爬虫学习\Python知识\01.py", line 2, in <module>response = httpx.get('https://spa16.scrape.center/')^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_api.py", line 198, in getreturn request(^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_api.py", line 106, in requestreturn client.request(^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_client.py", line 827, in requestreturn self.send(request, auth=auth, follow_redirects=follow_redirects)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_client.py", line 914, in sendresponse = self._send_handling_auth(^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_client.py", line 942, in _send_handling_authresponse = self._send_handling_redirects(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_client.py", line 979, in _send_handling_redirectsresponse = self._send_single_request(request)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_client.py", line 1015, in _send_single_requestresponse = transport.handle_request(request)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_transports\default.py", line 232, in handle_requestwith map_httpcore_exceptions():File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 155, in __exit__self.gen.throw(typ, value, traceback)File "C:\Users\Lenovo\Desktop\爬虫学习\venv\Lib\site-packages\httpx\_transports\default.py", line 86, in map_httpcore_exceptionsraise mapped_exc(message) from exc
httpx.RemoteProtocolError: Server disconnected without sending a response.

      啊,为什么会报错呀。不是说好了支持HTTP/2.0协议吗?其实,httpx默认是不会开启对HTTP/2.0协议的支持的,默认的还是HTTP/1.1协议,需要手动声明一下才能使用HTTP/2.0协议。代码如下:

import httpx
client = httpx.Client(http2=True)
response = client.get('https://spa16.scrape.center/')
print(response.text)

        这里我们声明了一个 Client 对象,赋值为client变量, 同时显式地将 http2参数设置为 True,这样便开启了对 HTTP/2.0的支持,之后就会发现可以成功获取HTML 代码了。这也就印证了这个示例网站只能使用HTTP/2.0访问。刚才我们也提到了, https和requests有很多相似的 API,上面实现的是GET请求, 对于POST请求、PUT请求和DELETE 请求来说, 实现方式是类似的:

import httpx
r =https.get('  https://www.httpbin.org/get',params=  {'name':'germey'})
I =   https://www.httpbin.org/post',data=  {'name':'germey'})
r = httpx.put('  https://www.httpsbin.org/put')
I = https.delete('  https://www.httpbin.org/delete')
x =   https://www.https://www.httpbin.org/patch')

        基于得到的 Response 对象, 可以使用如下属性和方法获取想要的内容。

  • status_code: 状态码。
  • text: 响应体的文本内容。 
  •  content: 响应体的二进制内容, 当请求的目标是二进制数据(如图片)时, 可以使用此属性获取。
  • headers: 响应头, 是 Headers对象, 可以用像获取字典中的内容一样获取其中某个Header  的值。
  • json: 方法, 可以调用此方法将文本结果转化为 JSON 对象。

        除了这些, httpx还有一些基本用法也和 requests 极其类似, 这里就不再赘述了,可以参考官方文档: https://www.python-httpx.org/quickstart/

4、 Client对象

        httpx中有一些基本的 API和requests 中的非常相似, 但也有一些 API是不相似的, 例如 httpx中有一个 Client 对象, 就可以和requests 中的 Session 对象类比学习。下面我们介绍Client 对象的使用。官方比较推荐的使用方式是with as 语句,示例如下:

import httpx
with httpx.Client() as client:response = client.get('https://www.httpbin.org/get')print(response)

运行结果如下:

<Response [200 OK]>

        这个用法等价于:

import httpx
client = httpx.Client()
try:response = client.get('https://www.httpbin.org/get')
finally:client. close()

        两种方式的运行结果是一样的,只不过这里需要我们在最后显式地调用close方法来关闭Client 对象。另外,在声明Client 对象时可以指定一些参数,例如headers,这样使用该对象发起的所有请求都会默认带上这些参数配置,示例如下:

import httpx
url = 'http://www.httpbin.org/headers'
headers = {'User-Agent': 'my-app/0.0.1'}
with httpx.Client(headers=headers) as client:r = client. get(url)print(r.json()['headers']['User-Agent'])

        这里我们声明了一个 headers 变量, 内容为User-Agent 属性, 然后将此变量传递给 headers 参数初始化了一个Client对象,并赋值为client变量,最后用client变量请求了测试网站,并打印返回结果中的 User-Agent 的内容:

my-app/0.0.1

        可以看到, headers 成功赋值了!

        这里介绍httpx的基本用法就到此为止,总结一下:httpx是跟requests非常相似的库,并且同时支持 HTTP/2.0协议。

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

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

相关文章

初始Nginx(基本概念)

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理&#xff0c;反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法&#xff08;默认方法&#xff09; 2.2 weight权重模式&#xff08;加权轮询&#xff09; 2.3 ip_hash 3、web缓存 三、基础特性 四…

(3)llvm ir转换过程

&#xff08;1&#xff09;DAG Lowering 输入的IR转换成SelectionDAG的过程被称作lowering 就是把llvm ir转成这种 &#xff08;2&#xff09;DAG legalization "DAG legalization"&#xff08;有向无环图合法化&#xff09;是编译器后端&#xff0c;特别是在LLVM中…

Java架构师之路三、网络通信:TCP/IP协议、HTTP协议、RESTful API、WebSocket、RPC等。

目录 TCP/IP协议&#xff1a; HTTP协议&#xff1a; RESTful API&#xff1a; WebSocket&#xff1a; RPC&#xff1a; UDP&#xff1a; HTTPS&#xff1a; 上篇&#xff1a;Java架构师之路二、数据库&#xff1a;SQL语言、关系型数据库、非关系型数据库、数据一致性、事…

WebStorm 2023:让您更接近理想的开发环境 mac/win版

JetBrains WebStorm 2023激活版下载是一款强大而智能的Web开发工具&#xff0c;专为提高开发人员的生产力而设计。这款编辑器提供了许多先进的代码编辑功能&#xff0c;以及一系列实用的工具和插件&#xff0c;可帮助您更快地编写、调试和测试代码。 WebStorm 2023软件获取 We…

不可不知的Redis秘籍:事务命令全攻略!

在数据处理的世界里&#xff0c;事务&#xff08;Transaction&#xff09;是一个不可或缺的概念。它们确保了在一系列操作中&#xff0c;要么所有的操作都成功执行&#xff0c;要么都不执行。这就像是一个“全有或全无”的规则&#xff0c;保证了数据的一致性和完整性。 今天&…

原生js实现extend,作用类似jquery.extend

1.js重构。此方法不能多级继承。 比如defaultSettings 定义一个对象series:{obj1:1,obj2:2}&#xff0c;调用的时候时候设置JsExtend({series:{obj1:111}}); 最终defaultSettings .series{obj1:111}&#xff1b;而不是defaultSettings .series:{obj111:1,obj2:2}。 function …

【算法与数据结构】127、LeetCode单词接龙

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;示例1为例&#xff0c;hit到达cog的路线不止一条&#xff0c;如何找到最短是关键。广度优先搜索是一圈…

VUE2整合富文本编辑器 wangEditor

安装 npm install wangeditor/editor wangeditor/editor-for-vue wangeditor/plugin-formula -Snpm install jquery封装组件 <template><div><div style"border: 1px solid #ccc; margin-top: 10px"><!-- 工具栏 --><Toolbarstyle"…

一些matlab的常用用法。在MATLAB中,如何实现数据的导入和导出?

一些matlab的常用用法。 MATLAB&#xff08;Matrix Laboratory&#xff09;是一款广泛使用的数值计算环境和编程语言&#xff0c;主要用于算法开发、数据可视化、数据分析以及数值计算等。以下是一些MATLAB的常用用法&#xff1a; 创建矩阵&#xff1a; 使用方括号 [] 创建矩阵…

vscode突然连不上服务器了,以前都可以的,并且ssh等其它方式是可以连接到服务器的

过完年回来准备开工干活&#xff0c;突然发现vscode连不上服务器了&#xff0c;奇了怪了&#xff0c;年前都可以的&#xff0c;看了一下报错&#xff0c;如下&#xff0c; 以为是服务器挂了&#xff0c;结果执行ssh xxxxxx 发现是可以远程连接的&#xff0c;看来服务器没有问题…

【算法与数据结构】841、LeetCode钥匙和房间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;之前的岛屿问题可以看做是无向图&#xff0c;因为所有连接陆地都是互通的。而本题是一个有向图&#x…

搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack

适用于 VR 的 OptiTrack 我们通过优化对虚拟现实跟踪最重要的性能指标&#xff0c;打造世界上最准确、最易于使用的广域 VR 跟踪器。其结果是为任何头戴式显示器 (HMD) 或洞穴自动沉浸式环境提供超低延迟、极其流畅的跟踪。 OptiTrack 主动式 OptiTrack 世界领先的跟踪精度和…

crmeb多门店商城系统二次开发 增加车辆车牌搜索功能、车辆公里数

1、增加的数据库 ALTER TABLE eb_store_order ADD cart_number VARCHAR(255) NOT NULL DEFAULT COMMENT 车牌 AFTER erp_order_id, ADD curmileage VARCHAR(255) NOT NULL DEFAULT COMMENT 当前里程 AFTER cart_number; ALTER TABLE eb_store_cart ADD cart_number VARCHAR(…

ChatGPT提示词(最新)

它能干什么? 包括但不限于&#xff1a; 类别描述学术论文它可以写各种类型的学术论文&#xff0c;包括科技论文、文学论文、社科论文等。它可以帮助你进行研究、分析、组织思路并编写出符合学术标准的论文。创意写作它可以写小说、故事、剧本、诗歌等创意性的文学作品&#…

SOLIDWORKS Visualize 界面介绍

现在有越来越多的朋友在工作中选择使用SOLIDWORKS Visualize正版软件&#xff0c;这真是太棒了!这次的主题是小索带大家了解SOLIDWORKS Visualize界面&#xff0c;让更多的朋友快速的熟悉SOLIDWORKS Visualize界面。 【菜单栏】位于界面的顶端&#xff0c;菜单栏包含多个下拉菜…

QDialog_trial_1

QDialog_trial_1 可视化 UI 设计 版本&#xff1a;Qt 6 目标 字体样式设置、清空按钮 conectSlotsByName 将信号与槽关联复选框 字体颜色设置 单选框&#xff0c;3个 signal 触发同一个 slot 确定、退出按钮 可视化方式生成信号、槽关联 包括 布局管理信号与槽的关联添加资…

SQLServer--添加修改注释

目录 一、表注释 1.添加 2.修改 二、表字段加注释 1.添加 2.修改 三、存储过程加注释 1.添加 2.修改 总结 一、表注释 1.添加 代码如下&#xff08;示例&#xff09;&#xff1a; --添加表注释 EXEC sys.sp_addextendedproperty nameNMS_Description, valueN这里…

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的&#xff0c;这一点很可惜。因为在许多实际工程中&#xff0c;人们对信号在局部区域的特征是比较关心的&#xff0c;这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…

微信小程序-人脸检测-眨眼驱动ESP32蓝牙设备灯

前面2篇文章已经写了具体的人脸检测和蓝牙 这里直接结合&#xff0c;只列js 代码&#xff0c;剩下的其他代码在另外文章里面 https://blog.csdn.net/walle167/article/details/136261993 https://blog.csdn.net/walle167/article/details/136261919 上代码 import bleBehavior …

线程池的基础使用和执行策略

什么是线程池 线程池&#xff0c;字面意思就是一个创建线程的池子&#xff0c;它的特点就是&#xff0c;在使用线程之前&#xff0c;就一次性把多个线程创建好&#xff0c;放到"池”当中。后面需要执行任务的时候&#xff0c;直接从"线程池"当中通过线程执行。…