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

网络爬虫相关

一、爬虫的基础内容

1、基本概念和用途

1.1、概念:

  • 模拟浏览器、发送请求,获取响应。(只能获取客户端所展示出来的数据)

1.2、特点:知识碎片化,针对不同的网站对应的方法也不同。

  • 爬虫:模拟客户端访问,抓取数据。
  • 反爬:保护重要数据,阻止恶意网络攻击
  • 反反爬:针对反爬的措施。

1.3、作用

  1. 数据采集
  2. 软件测试
  3. 抢票
  4. 网络安全
  5. web漏洞扫描

2、爬虫的分类

2.1、根据爬取网站的数量,可以分为

2.1.1、通用爬虫

①特点:爬取网站数量没有上线。

示例:搜索引擎

2.1.2、聚焦爬虫(*)

①特点:爬取网站数量有上限,有明确的目标。

②分类:

功能性爬虫

①特点:不获取数据,只为实现某一功能。

示例:投票 / 抢票 / 短信轰炸等。

数据增量性爬虫

①特点:获取数据用于后续分析

②分类

  • url与数据同时变化        -- 整条新数据
  • url不变,数据裱花        -- 数据部分更新

3、爬虫的基本流程

3.1、流程

  • url(网站资源定位符)
  • 对url发送网络请求,获取网络请求的响应
  • 解析响应,提取数据
  • 保存数据
3.1.1、确认目标:目标url:www.baidu.com
3.1.2、发送请求:发送网络请求,获取到特定的服务端给你响应。
3.1.3、提取数据:从响应中提取特定的数据        jsonpath / xpath / re
3.1.4、保存数据:本地(html、json、txt)、数据库

获取到的响应中,有可能会提取到还需要继续发送请求的url,可以拿着解析到的url继续发送请求

robots协议并不是一个规范,只是约定俗成。

二、http协议以及请求头

1、网络通信

1.1、步骤

  • 电脑(浏览器):   url      --   www.baidu.com      域名
  • DNS服务器:IP地址标注服务器,返回响应
  • DNS服务器返回IP地址给浏览器
  • 浏览器拿到IP地址去访问服务器,返回响应
  • 服务器返回给我们的响应数据:html / css / js / jpg......

1.2、实际原理

一个请求只能对应一个数据包(文件)

2、http协议和https协议

2.1、http协议(超文本传输协议)

  • 超文本:不仅仅限于文本,还包括图片、音频、视频。
  • 传输协议:指使用共用约定的固定格式来传递转换成字符串的超文本内容。
2.1.1、作用
  • 规定了服务器和客户端互相通信的规则。
2.1.2、http请求/响应的步骤
  • 客户端连接到web服务器
  • 发送http请求
  • 服务器接受请求返回响应
  • 释放连接tcp连接
  • 客户端解析html内容
2.1.3、请求头

请求方式:get  和   post

get:向服务器要资源

post:向服务器提交资源

  • User-Agent:模拟正常用户
  • cookie:登录保持
  • referer:当前这一次请求时由哪个请求过来的

抓包得到的响应内容才是判断依据,elements中的源码是渲染之后的源码,这个不能作为判断标准。

2.1.4、字符串编码解码

编码        -- encode()

字符串转换成二进制字符串        str 转换成 bytes

解码        -- decode()

二进制字符串转换成字符串        bytes 转换成 str

三、requests库的介绍

1、requests基本使用

requests模块作用:发送http请求,获取响应数据。

requests模块式第三方模块,需要安装:

1.1、安装命令:        --    pip install requests
1.2、基本使用:
import requests# 目标url
url = 'https://www.baidu.com'# 向目标url发送get请求
response = requests.get(url)# 打印响应内容#将其编码设置为UTF-8
response.encoding = 'utf-8'print(response.text)# print(response.content.decode())    默认UTF-8解码

使用requests库保存图片:

import requests# 确定url
url = 'https://img0.baidu.com/it/u=3225468693,477076843&fm=253&fmt=auto&app=138&f=JPEG?w=1115&h=800'# 发送请求,获取响应
res = requests.get(url)
print(res.content)# 保存响应
with open('1.jpg', 'wb') as f:f.write(res.content)
1.3、常用的属性或方法
  • response.url  响应的url。有时候响应的url和请求的url并不一致。
  • response.status_code  响应状态码。
  • response.request.headers  响应对应的请求头。
  • response.headers  响应头
  • response.cookies  响应的cookie(经过了set-cookie动作。返回cookieJar类型)
1.4、其他属性

response.text 和 response.content 的区别:

text:  str类型,  requests模块自定根据http头部对响应的编码作出有根据的推测。

content: bytes类型,  可以通过decode()解码。

2、用户代理

请求头中user-agent字段必不可少,表示客户端操作系统以及浏览器的信息。

示例

import requestsurl = 'https://www.baidu.com/'# 构建请求头
header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}# 带上user-agent发送请求
# headers参数接受字典形式的请求头,请求头字段名为key,值为value
response = requests.get(url, headers=header)print(response.content.decode())

添加user-agent的目的是为了让服务器认为是浏览器在发送请求,而不是爬虫在发送请求

3、URL传参

user-agent池        --防止反爬

第一种方法:使用user-agent池随机调用

import random# 随机调用
UAlist = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36','Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1','Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Mobile Safari/537.36',
]print(random.choice(UAlist))

第二种方法:使用fake_useragent  可能会出现异常

首先下载fake_useragent:pip install fake_useragent

from fake_useragent import UserAgent
print(UserAgent().random)

3.1、浏览器发送请求的原理

  • 构建请求
  • 查找缓存(在浏览器缓存中寻找有没有需要查找的资源,如果有的话就拦截请求,返回这一资源的副本,并直接结束请求)
  • 准备IP地址和端口
  • 等待tcp队列
  • 建立tcp连接
  • 发送http请求

浏览器会向服务器发送请求行,包括了请求方法,请求url,http协议

3.2、编码转译

  • 字符串被当做url提交时会被自动进行url编码处理
  • 输入           --字符串       明文
  • 发送请求的时候        --%xxx%xxx       密文
from urllib.parse import quote, unquote
# quote()     #明文转密文
# unquote()      #密文转明文
print(quote('参数'))  # 输出:%E5%8F%82%E6%95%B0
print(unquote('%E5%8F%82%E6%95%B0'))  # 输出:参数

3.3、发送带参数的请求

通过params携带参数字典

  • 构建请求参数字典
  • 发送请求的时候带上请求参数字典
import requestsurl = 'https://www.baidu.com/s?'header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}# 构建请求参数字典
name = input("请输入关键字:")
kw = {'wd': name}# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=header, params=kw)
print(response.content.decode())

四、简单案例

1、获取单张图片

示例(网易云)

# 1、导入模块
import requests# 找到目标url
url = 'https://p1.music.126.net/Y2C3RbZflVZMUuNBkKA-Jg==/109951170607654157.jpg?imageView&quality=89'# 构建请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 发送请求,获取响应
res = requests.get(url, headers=headers)
# res.content是二进制数据# 保存文件
with open('网易云.jpg', 'wb') as f:f.write(res.content)

2、获取单首歌曲

示例(酷我):

# 1、导入模块
import requests# 找到对应目标的url
url = 'https://ga-sycdn.kuwo.cn/2941b0d5664d5d39fbcc5d58db543670/67d45eec/resource/pay3_v2/279292599/'# 构建请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 发送请求,获得响应
res = requests.get(url, headers=headers)# 保存文件
with open('酷我.mp3', 'wb') as f:f.write(res.content)

3、获取单个MV

示例(酷我):

# 导入模块
import requests# 确定目标url
url = 'https://gd-sycdn.kuwo.cn/6bab1f0b832f4a522593a520edc1abee/67d45553/resource/m3/35/83/2343069577.mp4'# 获取请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 发送请求,获取响应
res = requests.get(url, headers=headers)# 保存文件
with open('mv.mp4', 'wb') as f:f.write(res.content)

4、获取单页贴吧

示例(百度贴吧):

# 导入模块
import requests# 确定目标url
url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E5%B0%8F%E6%98%8E&fr=search'# 获取请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 发送请求,获取响应
res = requests.get(url, headers=headers)# 保存文件
with open('小明.html', 'wb') as f:f.write(res.content)

示例(贴吧翻页):

# 导入模块
import requests# 确定目标url
url = 'https://tieba.baidu.com/f?'# 获取请求头字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}search = input('请输入搜索内容:')
page = int(input('请输入要保存的页数:'))for i in range(page):params = {'kw': search,'pn': i*50}# 发送请求,获取响应res = requests.get(url, headers=headers, params=params)# 保存文件with open(F'{search}{i+1}.html', 'wb') as f:f.write(res.content)

改为面向对象

# 导入模块
import requests# 改为面向对象class Tb:def __init__(self):self.url = 'https://tieba.baidu.com/f?'self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'}# 发送请求def send(self, params):res = requests.get(self.url, headers=self.headers, params=params)return res.text# 保存数据def save(self, page, con):with open(f'{page}.html', 'w', encoding='utf-8') as f:f.write(con)def run(self):word = input('请输入查找信息:')pages = int(input('请输入页数:'))for page in range(pages):params = {'kw': word,'pn': page*50}# 循环执行data = self.send(params)self.save(page, data)te = Tb()
te.run()

五、post请求和模拟登录

1、post请求:登录注册,传输大文本内容

requests.post(url,data)# data参数接受一个字典

get和post的区别:

  • get请求  --比较多                        
  • post请求  --比较少
  • get请求直接向服务器发送请求,获取响应内容
  • poet请求是先给服务器一些数据,然后再获取响应
  • get请求携带参数   --params
  • post请求携带参数  --data

2、cookie    模拟登录

# 导入模块
import requestsurl = 'https://music.163.com/'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36','Cookie': 'NMTID=00OirJp6WmwK2CZ0UsRs0AwIsuCZ24AAAGVlUI2ww; _iuqxldmzr_=32; _ntes_nnid=8acdc47e4ec07cfcc0c3d8a5a7563e2b,1741965900532; _ntes_nuid=8acdc47e4ec07cfcc0c3d8a5a7563e2b; WEVNSM=1.0.0; WNMCID=yzysjc.1741965901512.01.0; WM_TID=uR%2FXeQkMY%2BBEREERQAeWZsNjcExlNr%2Fr; sDeviceId=YD-wk74YKwl8c1BEgVBFVbBkf9FLdSm06BO; ntes_utid=tid._.jwaAVzsxdbJFRkFAAUfDM9YiNEl0ltaU._.0; __snaker__id=HFEZmaht8jsYG5Lq; JSESSIONID-WYYY=D4asd5JMMPTACEfo1h%5CuG3iv1f2kh4UokwaX6EThS3M6N%2BTH2v8RFTnYrueIKW6KK05aXaUMNg4muZNN1HwU6meM4CI%2F3swbc2%5CQ19yJAjnHar08eUxlMd6sZme0mrgWUZ%2B1Yz0lztuFpXI2ftmblBDuXpf%2FbJEy9Y7uRz9ocrPdN83W%3A1742052144561; WM_NI=uvbx63QfSmoh%2B74VnJtzOY3PI8UFru33HLKrWjKUtPOsE%2FJeYNhNhn2AIT1aHmDoEZDHq1GJ5C%2BgGLQobuWHScYDBnqiCBkb4Mh9VgIo%2FS%2B0CJ0ZUgjvDhqdG0OsaO0zUmg%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eeb3c55e9b939c88ce3dae9a8aa3d15f928a8e87c269fb94adabe766acbcf79bf92af0fea7c3b92ab7aaae99b53993ba9d8eee64e9e9fcb7ed42b8a681bab25c8be89ba7f17ff1ed88adca7a95b685b6f75c8dad8bd0c96f9b92a8afeb66f29f87b5b46b8cb38c90c8528898bfd2c642f79de588c64893b1ae96d64491bd97a5c166b3b78da3ea6af893a8dad56d8bb1e1b4aa3c819600bbd86daaaa8c89f47085f08194e445f4a69b8ee637e2a3; gdxidpyhxdE=OOzg9mY%2FxHuPDnHdx434EhbnKe5iAVw5gopZkA4GbO4xlhAJYlrunqeeT3mnVYsjaLgbMuXlm9Z3QdBpG2JLgex1w9OCqOm5ftHtqC0wvLOZbX6SJdnRKwjOcitbT9ViOWEItod3TyULCDOK%5Cy%5CuEvaAqdcv%2FPGk5Ax%5C26UMJI8dPzt6%3A1742051249437; __csrf=5b42a43d68078759426489b0b38b1550; MUSIC_U=00D6018410AF7F96CDC71B00BDBA2443074C93CB0859C0894B62EB44734CB09C8F339E40951BECD0A20BF971729D9E195D51057ED0B5601D9EB8504B44BA59190FC07E793A37F266D6B8FDF3CDA161416292E1690844821EBEE9B31E9B9EECC551AAA85ED5BEC21FC171CD3907BEE0F88BE58ABC25EBEE9FAFBCB8821C649C99B7AFE8D2C622FA851CD0096BB46B0A869688E1038BA3034E434D4EDD76242A23743EA0FAF138DE54513B4AFD4756238A5B03471FC7B5F4B5748D142991DB96CA7A9AD4AF0CAD55462359561BA5D3164128F00508A709CF4CCF0407BE84A8A25945F2DBCB4614F4AEB64E740E93E56FCD68291F57E410DC0260BEFA6BD303378F0CB856081EAD6433FCBA395F144059BF3D18D3CBAAEFB267307A0683684042C4558E9965D2379DC9B92EBEDB41563C1C7F3B59114880CD15E586C57504BDEEB7F61CE50DACC1C5DED2C6C42205A8E360E6A8BB3CF69469EF9712A6A35972CB79BE; ntes_kaola_ad=1'
}# 发送请求
res = requests.get(url, headers=headers)
print(res.text)

3、post请求举例

示例(金山翻译):

# 导入模块
import requests
import jsonurl = 'https://ifanyi.iciba.com/index.php?c=trans'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}word = input('请输入你要翻译的内容:')# 构建data参数字典
post_data = {'from': 'zh','to': 'en','q': word
}res = requests.post(url, headers=headers, data=post_data)
# print(res.text)# 解析数据
# 将json数据转换为Python字典
dic = json.loads(res.text)
print(dic['out'])

4、session

requests模块中的session类能够自动处理发送请求获取响应过程中所产生的cookie,进而达到状态保持的目的。(自动处理cookie,即下一次请求会带上前一次的cookie。

session = requests.session()      #实例化session对象
res = session.post(url,data=data)使用session访问登录以后的页面
session.get(url.text)
  • 1、对访问登录后才能访问的页面去进行抓包
  • 2、确定登录请求的url地址,请求方法和所需的参数
  • 3、确定登录才能访问的页面url和请求方法
  • 4、利用requests.session完成代码

5、cookie池

user-agent池:短时间内多次发出请求,尽量每一次的请求都用不同的用户代理。

cookie池:每一个cookie就代表一个账号。

cookie有有效期,session不用担心有效期的问题。

cookie跟session的区别:

  • cookie数据放在浏览器中,session数据放在服务器中。
  • cookie不安全,别人可以分析存放在本地的cooker并进行cookie欺骗,考虑到安全应当使用session。
  • session会在一定时间内保存在服务器上,考虑到减轻服务器性能方面,应当使用cookie。
  • 可以考虑将登录信息等重要信息存放在session,其他信息如果需保留,可以存放在cookie中。

相关文章:

网络爬虫相关

一、爬虫的基础内容 1、基本概念和用途 1.1、概念: 模拟浏览器、发送请求,获取响应。(只能获取客户端所展示出来的数据) 1.2、特点:知识碎片化,针对不同的网站对应的方法也不同。 爬虫:模拟…...

算法及数据结构系列 - 二分查找

系列文章目录 算法及数据结构系列 - BFS算法 文章目录 二分查找框架思路经典题型二分查找寻找左侧边界寻找右侧边界 刷题875. 爱吃香蕉的珂珂1011. 在 D 天内送达包裹的能力392. 判断子序列 二分查找 框架思路 int binarySearch(int[] nums, int target) {int left 0, righ…...

多环境开发-Profiles

在实际的项目开发中,我们通常会涉及多个环境,如开发环境(dev)、测试环境(test)和生产环境(pro)。在不同的环境下,程序的配置信息会有所不同,例如连接的数据库…...

《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现

《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现 《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现线程的概念引入线程的背景线程与进程的区别 线程创建与运行pthread_createpthread_join可在临界区内调用的函数工作&#…...

MambaVision:一种Mamba-Transformer混合视觉骨干网络

摘要 我们提出了一种新型混合Mamba-Transformer主干网络,称为MambaVision,该网络专为视觉应用而设计。我们的核心贡献包括重新设计Mamba公式,以增强其对视觉特征的高效建模能力。此外,我们还对将视觉Transformer(ViT&…...

【Visio使用教程】

Visio使用教程 1. Visio 的基本介绍1.1 Visio 是什么?核心特点: 1.2 主要功能与应用场景典型用途:行业应用: 1.3 版本与兼容性1.4 Visio下载1.5 安装 2. Visio 的界面与基础操作2.1 界面布局详解2.2 创建新文档与模板选择2.3 形状…...

深度学习-服务器训练SparseDrive过程记录

1、cuda安装 1.1 卸载安装失败的cuda 参考:https://blog.csdn.net/weixin_40826634/article/details/127493809 注意:因为/usr/local/cuda-xx.x/bin/下没有卸载脚本,很可能是apt安装的,所以通过执行下面的命令删除: a…...

什么是梯度方差和缩放因子

什么是梯度方差和缩放因子 目录 什么是梯度方差和缩放因子计算梯度方差(Fisher 信息)作用梯度方差计算方式(方差越大,参数越重要,小步更新(细致一些))示例使用缩放因子作用示例两者的区别总结在 LoRA(Low-Rank Adaptation)中,计算梯度方差和使用缩放因子是两个不同的概…...

Linux 如何上传本地文件以及下载文件到本地命令总结

如果你希望在 Shell 终端中将远程服务器上的文件下载到本地电脑,可以使用以下工具和命令: 1. rz / sz(用于 Xshell、MobaXterm 等终端) 如果你使用的是Xshell、SecureCRT、MobaXterm等支持 rz/sz 的终端,可以使用 rz …...

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…...

stm32 L432KC(mbed)入门第一课

目录 一. 前言 二. 专栏意义 三. MS入门第一课 一. 前言 新的一年MS课程又开始了,同时也到了该专栏的第三个年头。在前两年中,该专栏帮助了很多第一次接触单片机的同学。其中,有的同学订阅专栏是为了更好的完成并且通过MS这门课程&#xf…...

【面试手撕】非常规算法,多线程常见手撕题目

【面试手撕】非常规算法,多线程常见手撕题目 生产者消费者ReentrantLock实现的生产苹果/消费苹果synchronized实现的生产消费LinkedBlockingQueue阻塞队列方法实现多条件资源分配分布式任务调度模拟 交替打印两个线程交替打印1-100之间的数ReentrantLock 实现synchr…...

Python 基础语法详解

一、变量和数据类型 变量 在 Python 中,变量无需声明类型,直接赋值即可。变量名区分大小写。 # 整数类型 age 25 print(age) # 输出:25# 浮点数类型 height 1.75 print(height) # 输出:1.75# 字符串类型 name "张三&…...

批量给 Excel 添加或删除密码保护|Excel 批量设置打开密码和只读密码

我们在将 Excel 文档发送给第三方或者进行存档的时候,对 Excel 文档添加密码保护是非常重要的一个操作。添加保护后的 Excel 文档。就只能有相应权限的用户才能够打开或者编辑操作。尤其是当我们 Excel 文档中内容非常敏感非常重要的时候,添加保护就显得…...

4.JVM-垃圾回收介绍

记录个人学习中记录笔记,如有错误请您指正,谢谢🙏 垃圾回收器发展史 传统垃圾回收: 分代回收 不同代有不同的垃圾回收机制 保底 标记清除算法 垃圾识别算法 引用计数法 缺陷:下图2 出现循环引用 无法解决 可达性分析 大部分(Java,pytho…...

Redis-锁-商品秒杀防止超卖

一、秒杀(Seckill)​ 1. ​定义 ​秒杀:短时间内(如1秒内)大量用户同时抢购 ​限量低价商品 的营销活动。​典型场景:双11热门商品抢购、小米手机首发、演唱会门票开售。 2. ​技术挑战 挑战点说明后果…...

PostgreSQL 多数据库集簇配置及多数据库复制方法【流程+代码实例】

PostgreSQL 多数据库集簇配置及多数据库复制方法 1. 多数据库集簇配置 安装下载完postgresql后,系统此时包含一个postgres用户和一个名为postgres的默认数据库。 PostgreSQL 基本命令 服务管理命令 # 停止和启动及重启PostgreSQL服务 sudo systemctl stop postgr…...

【k8s004】 Docker 打包 K8s镜像

文章目录 一. 准备工作1. 安装 Docker: [官方安装文档](https://docs.docker.com/get-docker/)2. 准备应用代码(示例使用 Node.js 应用) 二. 创建 Dockerfile3、构建镜像(注意最后的点号)4、测试运行5、推送镜像到仓库6、 Kuberne…...

std::invoke详解

基础介绍 c17版本引入了std::invoke特性,这是一个通用的调用包装器,可以统一调用: 普通函数成员函数函数对象Lambda表达式指向成员的指针 它的主要作用是提供一个统一的方式来调用各种可调用对象。 std::invoke依赖的头文件:#…...

第一个vue项目

项目目录 启动vue项目 npm run serve 1.vue.config.js文件 (CLI通过vue-cli-serve启动项目,解析配置配置文件vue-condig-js) // vue.config.js //引入path板块,这是Node.js的一个内置模块,用于处理文件路径,这里引用…...

基于CNN的多种类蝴蝶图像分类

基于CNN的多种类蝴蝶图像分类🦋 基于卷积神经网络对64992786张图像,75种不同类别的蝴蝶进行可视化分析、模型训练及分类展示 导入库 import pandas as pd import os import matplotlib.pyplot as plt import seaborn as sns import numpy as np from …...

Unity插件-适用于画面传输的FMETP STREAM使用方法(三)基础使用

目录 一、插件介绍 二、组件介绍 三、Game View Streaming 1、使用 FM Network UDP 的基本设置 Server Scene Client Scene 2、使用使用 FM WebSocket 的基本设置 四、Audio Streaming 五、Microphone Streaming 一、插件介绍 ​​​​​​Unity插件-适用于画面传输的…...

微信小程序wx.request接口报错(errno: 600001, errMsg: “request:fail -2:net::ERR_FAILED“)

来看看报错 报错如下: 请求发送部分,代码如下: uni.request({url: self.serverUrl "/getRealName",method: GET,data: {"code": self.info.code,},header: {"Authorization": uni.getStorageSync(tokenHead) uni.getStorageSync(token)}}…...

使用Docker快速搭建OpenAI兼容的Embeddings与Rerank双API服务

使用Docker快速搭建OpenAI兼容的Embeddings与Rerank双API服务 前言环境准备硬件要求软件依赖双服务部署指南1. Embeddings API部署启动容器参数说明2. Rerank API部署启动容器服务验证与测试通用验证方法1. Embeddings API测试请求示例响应特征2. Rerank API测试请求示例响应解…...

基于Python+MySQL编写的(WinForm)图书管理系统

一、项目需求分析 1.1 项目介绍 项目背景 图书馆管理系统是一些单位不可缺少的部分,书籍是人类不可缺少的精神食粮,尤其对于学校来说,尤其重要。所以图书馆管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管…...

[贪心算法] 摆动序列

1.解析 这里我们的贪心体现在,这里我们只需要找到每一个拐点位置的数字即可, 证明: 当我们在A点时,我们下一步的选择有四种 A到D这个线段内的数字(不包括D)选择D点D到F的点F之后的点 对于A到D来说&#xf…...

WPF未来展望:紧跟技术发展趋势,探索新的可能性

WPF未来展望:紧跟技术发展趋势,探索新的可能性 一、前言二、WPF 与.NET 技术的融合发展2.1 拥抱.NET Core2.2 利用.NET 5 及后续版本的新特性 三、WPF 在新兴技术领域的应用拓展3.1 与云计算的结合3.2 融入物联网生态 四、WPF 在用户体验和设计方面的创新…...

低空经济腾飞:无人机送货、空中通勤,未来已来

近年来,低空经济逐渐成为社会关注的焦点。从无人机送货到“空中的士”,再到飞行培训的火热进行,低空经济正迎来前所未有的发展机遇。随着技术进步和政策支持,这一曾经看似遥远的未来场景,正逐步变为现实。 低空经济如何…...

http proxy的原理是什么

Http代理的原理 代理服务器会自动提取请求数据包中的HTTP请求数据发送给服务端,并将服务端的HTTP响应数据转发给发送请求的客户端,HTTP代理服务器使用的端口通常是8080。 对于Web客户端来说,代理扮演的服务器角色,接收请求&…...

Redis--补充类型

目录 一、引言 二、补充类型 1.streams 2.geospatial 3.hyperloglog 4.bitmap 5.bitfields 三、总结 一、引言 在简单学习了redis中的5个数据类型(string,list,hash,set,zset)之后,本篇文…...