(2)Python爬虫--requests
文章目录
- 前言
- 一、 认识requests库
- 1.1 前情回顾
- 1.2 为什么要学习requests库
- 1.3 requests库的基本使用
- 1.4 响应的保存
- 1.5 requests常用的方法
- 1.6 用户代理
- 1.7 requests库:构建ua池(可以先跳过去)
- 1.8 requests库:带单个参数的get请求
- 1.9 requests库:带多个参数的get请求
- 练习1: 下载多页百度贴吧的页面
- 练习2: 下载多页百度贴吧的页面(改写为面向对象的形式)
- 2.0 requests的post请求
- 2.1 requests的session类
- 2.2 SSL证书验证
- 2.3 IP代理
- 2.4 代理的基础使用
- 2.5 验证代理IP有效性
- 总结
前言
在当今数据驱动的时代,网络爬虫成为获取互联网信息的重要工具之一。Python 作为一门简单易用且功能强大的编程语言,提供了许多优秀的库来帮助开发者高效地完成爬虫任务。其中,requests 库
以其简洁的 API 和强大的功能,成为 HTTP 请求的首选工具。无论是简单的网页数据抓取,还是复杂的 API 交互,requests 都能以极少的代码实现高效的数据获取。
本文将介绍 requests 库的基本用法,包括发送 GET/POST 请求、处理响应数据、设置请求头与参数,以及应对常见的反爬策略。通过本文的学习,读者将能够掌握使用 requests 进行网络爬虫开发的核心技巧,并能够灵活运用于实际项目中。
一、 认识requests库
1.1 前情回顾
在学习今天的内容之前,我们先来简单回忆一下上节课使用urllib进行页面爬取的操作。
需求:抓取百度首页的源代码
实例代码:
# 需求: 抓取百度首页的源代码# 前提: 爬虫的前提是必须上网# 导包
import urllib.request# 确定url地址
url = 'https://www.baidu.com' # https存在ssl加密协议(使用ua反爬)# ua反爬操作(字典形式)
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'
}# 定制request
# 第二个参数位置不对,因而使用关键字参数
request = urllib.request.Request(url,headers=header)
# 模拟浏览器发送请求
response = urllib.request.urlopen(request)
# 获取响应数据(二进制数据使用decode()方法解码)
content = response.read().decode()
# 打印数据
print(content)
1.2 为什么要学习requests库
urllib 就像手动挡汽车——能开但麻烦;requests 是自动挡——简单高效,直接起飞!
具体对比:
urllib:要手动拼参数、手动加请求头、手动处理Cookie,代码又臭又长。
requests:一行代码发请求,自动解析JSON,会话保持无痛衔接,爽就一个字!
结论:
除非你被迫用标准库,否则无脑选 requests,省时省力不折腾!
1.3 requests库的基本使用
在上节课的末尾,我们已经成功安装了requests第三方库,那么今天我们就在使用一下requests库,来观察它是如何节省时间,提高效率的
需求:抓取百度首页的源代码
示例代码:
# 需求: 爬取百度页面的源码# 1. 导包
import requests# 2. 发送请求
# 进入百度首页查看请求方法(get)
url = 'https://www.baidu.com'
# 调用requests的get方法--获取响应
response = requests.get(url)
# 通过打印response可以直接获取状态码
# print(response)# 保存响应
# 方式1 调用text方法
# text属性会自动寻找一个解码方式去解码会出现乱码的情况
# print(response.text)
# 解决方式如下
# 设置response的编码格式
# response.encoding = 'utf-8'
# 重新输出
# print(response.text)# 方式二 使用content方法
# print(response.content)
# 获取的是二进制数据 使用decode方法解码即可
print(response.content.decode())
1.4 响应的保存
需求一:使用requests库来保存百度首页的源代码
示例代码:
# 需求一:使用requests库来保存百度首页的源代码
# 导包
import requests# 发送get请求
url = "https://www.baidu.com"
response = requests.get(url)# 下载百度首页源码
# with open 会自动关闭文件
# 含有中文,因此需要带上encoding参数
with open('baidu.html','w',encoding='utf-8') as f:f.write(response.content.decode())# 当然也可以使用上节课讲过的方法
# urllib.request.urlretrieve(url, 'baidu.html')
需求二:使用requests库来保存图片
示例代码:
# 需求二:使用requests库来保存图片
import requests# 确定url同时确定请求方法(get)
url = 'https://wx3.sinaimg.cn/mw690/007BFO4lgy1hr3uapmke4j317e1kuh25.jpg'# 调用get方法
response = requests.get(url)# 输出响应内容,调用content方法
# 图片保存的形式为二进制,因而不用解码
# 保存到本地# with open会自动关闭文件
# 切记要带上b模式 否则无法保存字节数据(图片/视频/音频)
with open('kun.jpg', 'wb') as f:f.write(response.content)
1.5 requests常用的方法
前面提到的:
text: str类型, requests模块自动根据http头部对响应的编码作出有根据的推测
content: bytes类型,可以通过decode()解码
比较常用的还有另外一些:
import requestsurl = 'https://wx3.sinaimg.cn/mw690/007BFO4lgy1hr3uapmke4j317e1kuh25.jpg'
response = requests.get(url)# 一些较为常用的方法如下:# 打印响应的url
print(response.url)
# 打印响应对象的请求头
print(response.request.headers)
# 打印响应头
print(response.headers)
1.6 用户代理
为什么要进行用户代理?
一句话解释:
用户代理(User-Agent)是用来伪装成真实浏览器访问网站的,防止被服务器识别为爬虫直接封杀。
人话版:
不设UA?网站一看你是Python爬虫,立马关门放验证码!
示例代码:
import requests# 我们来看没有使用用户代理的响应长度
url = 'https://www.baidu.com'response = requests.get(url)# print(response.content.decode())
print(len(response.content.decode()))# 通过对百度首页源码的比较,发现未使用用户代理的情况下响应内容是不够的 一些css样式没有展示出来
# 配置用户代理 也就是上节课讲的 配置ua反爬
# 请求头中user-agent字段必不可少,表示客户端的操作系统以及浏览器的信息
# 添加user-agent的目的是为了让服务器认为是浏览器在发送请求,而不是爬虫程序在发送请求
# 配置ua(必须要字典形式)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}# 在get加入headers参数,传入headers字典
# headers使用的是关键字参数,通过ctrl+p 可以观察到,第二个参数暂时用不到被搁置了
response = requests.get(url,headers=headers)
# 重新获取长度
# print(response.content.decode())
# print(len(response.content.decode()))
# 发现内容和长度都变多了
1.7 requests库:构建ua池(可以先跳过去)
大致先了解一下,目前不会大量的爬取一个页面,暂时用不到。
配置ua池的原因:
用多个UA轮换伪装不同浏览器访问,防止单一UA被识别封禁,提高爬虫存活率。
示例代码:
import random
# 构建ua池,防止多次调用被反爬# 自己写ua池
# 通过不断更换页面的打开方式,可以获取多个ua
uAlist = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.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/135.0.0.0 Mobile Safari/537.36'
]
# 随机获取一个ua
print(random.choice(uAlist))# 方法2 外包生成ua
# 下载fake-useragent包
# 频繁调用的时候可能会报错
from fake_useragent import UserAgent
print(UserAgent().random)
1.8 requests库:带单个参数的get请求
需求:爬取搜索结果为天气的页面
示例代码:
import requests
from urllib.parse import quote# 单参数的get请求
# 需求:爬取搜索结果为天气的页面
# url = https://www.baidu.com/s?ie=UTF-8&wd=%E5%A4%A9%E6%B0%94# 上节课已经讲过,我们的中文要变成这种密文的形式,才能正常的爬取搜索页面
# 需要用到quote方法, 这里不再强调# 可以进行人性化的设置
content = input("请输入搜索内容:")url = f'https://www.baidu.com/s?ie=UTF-8&wd={quote(content)}'
print(url)# 配置ua
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}# 获取响应
response = requests.get(url, headers=headers)
print(response.content.decode())
1.9 requests库:带多个参数的get请求
需求:爬取搜索结果周杰伦性别为男的结果
示例代码:
import requests
from urllib.parse import quote# 多参数的get请求
# 需求:爬取搜索结果周杰伦性别为男的结果
# url = https://www.baidu.com/s?ie=UTF-8&wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7# 多参数需要配置参数字典url = 'https://www.baidu.com/s?ie=UTF-8&'params = {'wd':'周杰伦','sex':'男'
}# 配置ua
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}# 获得响应
# 使用ctrl + p 可以得到 get请求使用的是params
response = requests.get(url=url,params=params,headers=headers)
print(response.content.decode())
练习1: 下载多页百度贴吧的页面
import requests
from urllib.parse import quote# 需求: 下载多页百度贴吧的内容
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=0
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=50
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=100url = 'https://tieba.baidu.com/f?'# 配置ua
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}name = input('请输入要搜索的内容:')
pages = int(input('请输入要爬取的页数:'))for page in range(pages):params = {'kw': quote(name),'ie': 'utf-8',# 观察每次的url变化'pn': page * 50}response = requests.get(url, headers=headers, params=params)with open(name + str(page + 1) + '.html', 'w', encoding='utf-8') as f:f.write(response.content.decode())
练习2: 下载多页百度贴吧的页面(改写为面向对象的形式)
import requests
from urllib.parse import quote# 需求: 下载多页百度贴吧的内容
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=0
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=50
# https://tieba.baidu.com/f?kw=%E7%99%BE%E5%BA%A6&ie=utf-8&pn=100class TieBa:__url = 'https://tieba.baidu.com/f?'__header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}# 发送请求def __send(self,params):response = requests.get(self.__url,params=params,headers=self.__header)return response# 保存数据def __save(self,name,page,response):with open(name + str(page + 1) + '.html', 'w', encoding='utf-8') as f:f.write(response.content.decode())def main(self):name = input('请输入要搜索的内容:')pages = int(input('请输入要爬取的页数:'))for page in range(pages):params = {'kw': quote(name),'ie': 'utf-8',# 观察每次的url变化'pn': page * 50}response = self.__send(params)self.__save(name,page,response)# if __name__ == '__main__':相当于一个测试方法
if __name__ == '__main__':tieba = TieBa()tieba.main()
2.0 requests的post请求
POST请求通常用于提交敏感或结构化数据,主要场景包括:
-
表单提交(如登录账号、上传文件)
-
API交互(如发送JSON数据给服务端)
-
隐私操作(密码、支付信息等不适合暴露在URL的数据)
需求: post爬取百度翻译的翻译结果
示例代码:
import requests
from urllib.parse import quote# 需求: post爬取百度翻译的翻译结果url = 'https://fanyi.baidu.com/sug'# 与get多参数请求一致
# 配置data参数字典
data = {'kw': 'site'
}# 配置ua反爬
headers = {'User-Agent': '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',# cookie不要复制,而是使用自己当前的cookie
'cookie': 'BIDUPSID=DB58345B891552BB9313D4BDC55106E3; PSTM=1720073445; BAIDUID=DB58345B891552BBD28EB4C334A909DD:FG=1; BDUSS=TdpY0Q2R2VwRU00VElTbmVOYjNZSk5ZOE1QcFZSaDBickNONUdvfkxVRn4xTFZtRVFBQUFBJCQAAAAAAAAAAAEAAAA6EBJVZmRnaGRnZWlnZXJrbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9HjmZ%7ER45mM; BDUSS_BFESS=TdpY0Q2R2VwRU00VElTbmVOYjNZSk5ZOE1QcFZSaDBickNONUdvfkxVRn4xTFZtRVFBQUFBJCQAAAAAAAAAAAEAAAA6EBJVZmRnaGRnZWlnZXJrbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9HjmZ%7ER45mM; H_WISE_SIDS_BFESS=60279_61027_61158_61374_61426_61437_60853_61492_61430; BAIDU_WISE_UID=wapp_1746598206985_847; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_WISE_SIDS=62325_62869_62969_63028_63194; arialoadData=false; delPer=0; ZFY=3As8a8sh:AgGJY4C29Pp9MW:BZkIS3Ax29rHpgANGv2oo:C; BA_HECTOR=8g852520842h0h8h2525a50g0g0l011k1uggn25; BAIDUID_BFESS=DB58345B891552BBD28EB4C334A909DD:FG=1; PSINO=2; H_PS_PSSID=60279_61027_61683_62325_62869_62969_63028_63040_63141_63155_63190_63194_63210; BRAND_LANDING_FROM_PAGE=2231_0_1746880033; BCLID=10420906196303252853; BCLID_BFESS=10420906196303252853; BDSFRCVID=sS-OJexroGWgxWvsXPPREHtYoFweG7bTDYrEtLb2UCSdqB4VvQteEG0Pts1-dEu-S2OOogKKBeOTHgDoc2L2qQCaBcS5ih4EkGibtf8g0M5; BDSFRCVID_BFESS=sS-OJexroGWgxWvsXPPREHtYoFweG7bTDYrEtLb2UCSdqB4VvQteEG0Pts1-dEu-S2OOogKKBeOTHgDoc2L2qQCaBcS5ih4EkGibtf8g0M5; H_BDCLCKID_SF=tRAOoC--tIvqKRopMtOhq4tehHRtLxc9WDTm_DoEbxoZjC3RWMT1jnLbQGr30P3yQjLf-pPKKR71DhQ_060K34A1bJPtWnTZ3mkjbp3Dfn02OPKz0TKVy-4syPRGKxRnWIvRKfA-b4ncjRcTehoM3xI8LNj405OTbIFO0KJDJCFahIPlD6KKePK_hlr0etjK2CntsJOOaCv5VT6Oy4oWK4413UJOLb5eyNRTbq5dbUTos43NQTJD3M04K4oJWPDHQm7g0PjPJUQ-VtbNQft20b0yDecb0RLLLbr92b7jWhvIeq72y-JUhPJXXa5DQxJK0D7g_RTSJp5OsnTP5-DWbT8IjH62btt_Jn-qoUK; H_BDCLCKID_SF_BFESS=tRAOoC--tIvqKRopMtOhq4tehHRtLxc9WDTm_DoEbxoZjC3RWMT1jnLbQGr30P3yQjLf-pPKKR71DhQ_060K34A1bJPtWnTZ3mkjbp3Dfn02OPKz0TKVy-4syPRGKxRnWIvRKfA-b4ncjRcTehoM3xI8LNj405OTbIFO0KJDJCFahIPlD6KKePK_hlr0etjK2CntsJOOaCv5VT6Oy4oWK4413UJOLb5eyNRTbq5dbUTos43NQTJD3M04K4oJWPDHQm7g0PjPJUQ-VtbNQft20b0yDecb0RLLLbr92b7jWhvIeq72y-JUhPJXXa5DQxJK0D7g_RTSJp5OsnTP5-DWbT8IjH62btt_Jn-qoUK; ab_sr=1.0.1_ZjYyNTljZWM5MDRkZTIzMjAwN2FhZmY0MGJhNjc1ZGNlNTVmMjFhOTgyNDk1NGYwOWNjZGYxZmJlYWRjYWQ3ZDY2MjI3OTMxOTgxZTk1YTExZTliYjRjYWRhMGNmYmI5NjhiOGVhODdjNzkxM2QxMTg2YTFlMDg3OWNhYmVjNTQxZTA0NTdlYTNhYmYwYTllNjk1YWExMDlkNzE2MTc2ODc4MzA1NTE0ODU4ZjhjNzQ4MWJhYjZlMjEzYzM1OGQ1ZDBlMTJhY2EyYWQzYmE1ODY4NWJhMmEwNGU2YWU4YjM=; RT="z=1&dm=baidu.com&si=017fbbb0-a34c-4b7c-9a9e-4fe98db29c6b&ss=mai6cdmq&sl=h&tt=ybx&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=xnv7'
}
# 不同的是,post请求用到的是data而不是params
response = requests.post(url=url, data=data, headers=headers)# 获取结果 直接调用json方法即可 非常方便
# 请求出现错误的时候加上cookie即可(后续会讲解)
print(response.json())
2.1 requests的session类
需求1: 爬取QQ空间登录后的页面
示例代码:
import requests
# 当我们在登录之后才能显示的页面 换到其他浏览器打开之后就会直接跳转到登录页面
# 那么这样的网页我们可以爬取么?可以的 需要用到我们的cookie即可
url = 'https://user.qzone.qq.com/你的QQ号'
# 携带当前的cookie(目前你的cookie)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36','cookie': 'ptcz=6a497602ea5465be8a61bfe1423f9acbddb3b810c5d52e41c80bbfb70aedda80; pgv_pvid=4211887676; fqm_pvqid=b3500b22-caa8-46c2-88c1-77f857a3eaab; pac_uid=0_kjknKBPDA0d8D; _qimei_uuid42=1911c0e0e3a100ab8c892bfefb7acf342afd3c7d41; _qimei_fingerprint=28e27f13e024b4e72ed41740c05847af; _qimei_q36=; _qimei_h38=2db807598c892bfefb7acf340200000441911c; eas_sid=G1Q7X4d346C4W9e0I1u840S0Y9; _qpsvr_localtk=0.43827129920220864; pgv_info=ssid=s3904169120; uin=o3286179271; skey=@mvtpMO6pz; RK=b//Mn8OeyR; p_uin=o3286179271; pt4_token=NH-q3Rk933*QZ3IrHSZZ7DcA1DxeTJLBiq1oqs-*9sI_; p_skey=6quXxaJ7OMLPi7QZzoOCBNw9I9ZhPyxc0AKNMo-M6m8_; Loading=Yes; qz_screen=1549x872; 3286179271_todaycount=0; 3286179271_totalcount=107; QZ_FE_WEBP_SUPPORT=1; cpu_performance_v8=0'
}
response = requests.get(url=url, headers=headers)
print(response.content.decode())
需求2:通过session访问登录后的页面
步骤:
- 1对访问登录后才能访问的页面去进行抓包
- 2.确定登录请求的ur1地址,请求方法和所需的参数
- 3.确定登录才能访问的页面ur1和请求方法白
- 4.利用requests.session完成代码
示例代码:
import requests# session可以保存同一个cookie 进而进行爬取登录后的页面# 创建会话
session = requests.Session()
# 用session来代替requests发送请求
session.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 再次用session来获取数据响应(再次发送请求)
response = session.get('http://httpbin.org/cookies')
print(response.text)
如果两次调用requests的get请求,看看会不会是同样的效果
import requestsrequests.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 再次发送请求
response = requests.get('http://httpbin.org/cookies')
print(response.text)
发现结果与上述使用session不一致,原因就是因为cookie发生了变化。
2.2 SSL证书验证
当使用Requests调用请求函数发送请求时,由于请求函数的verify参数的默认值为True,所以每次请求网站时默认都会进行SSL证书的验证。不过,有些网站可能没有购买SSL证书,或者SSL证书失效,当程序访问这类网站时会因为找不到SSL证书而抛出SSLError异常。例如,使用Requests请求国家数据网站
2.3 IP代理
代理ip是一个ip,指向的是一个代理服务器代理服务器能够帮我们向目标服务器转发请求
正向代理和反向代理:
-
正向代理: 给客户端做代理,让服务器不知道客户端的真实身份保护自己的ip地址不会被封,要封也是封代理ip
-
反向代理: 给服务器做代理,让浏览器不知道服务器的真实地址
总结:
-
正向代理: 保护客户端,反向代理保护服务端
-
反向代理: 给服务器做代理,让浏览器不知道服务器的真实地址
2.4 代理的基础使用
import requests# 代理的使用(可以在快代理中找一个)# 代理参数
proxies = {# 这个http也可以不带"http": "http://117.42.94.11:21021",
}# ua反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
}
url = "https://www.baidu.com"
# 带上我们的代理参数即可
response = requests.get(url, headers=headers, proxies=proxies)# IP无效时,会自动使用本机真实的ip,因而访问有效
print(response.text)
2.5 验证代理IP有效性
import requests# 代理的有效性测试
# 代理ip无效的时候自动使用本机ip
# 免费代理ip网站: http://www.ip3366.net/free/?stype=3
proxies = {'https:': '93.188.161.84:80'
}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
}url = 'https://2025.ip138.com/'response = requests.get(url, headers=headers, proxies=proxies)print(response.text)
总结
requests 库
以其简单、优雅的设计,极大地简化了 Python 中的 HTTP 请求操作,使其成为爬虫开发中的利器。本文从基础的请求发送、响应解析,到高级的会话管理、代理设置和异常处理,全面介绍了 requests 的核心功能。无论是数据采集、接口测试,还是自动化任务,requests 都能提供稳定高效的解决方案。
当然,在实际爬虫开发中,除了掌握 requests 的基本使用,还需要结合 BeautifulSoup、Scrapy 等工具进行数据解析,并注意遵守网站的爬取规则,避免因频繁请求导致 IP 被封禁。希望本文能帮助读者快速上手 requests,并在实际项目中灵活运用,高效完成数据采集任务。
相关文章:
(2)Python爬虫--requests
文章目录 前言一、 认识requests库1.1 前情回顾1.2 为什么要学习requests库1.3 requests库的基本使用1.4 响应的保存1.5 requests常用的方法1.6 用户代理1.7 requests库:构建ua池(可以先跳过去)1.8 requests库:带单个参数的get请求1.9 requests库&#x…...
springboot旅游小程序-计算机毕业设计源码76696
目 录 摘要 1 绪论 1.1研究背景与意义 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序旅游网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统…...
TCPIP详解 卷1协议 七 防火墙和网络地址转换
7.1——防火墙和网络地址转换 为防止终端系统不被攻击,需要一种方法来控制互联网中网络流量的流向。这项工作由防火墙来完成,它是一种能够限制所转发的流量类型的路由器。 随着部署防火墙来保护企业,另一个问题变得越来越重要:可…...
Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
一、CI/CD 流程设计与工具选择 1. 技术栈选择 版本控制:Git(推荐 GitHub/GitLab)CI 工具:Jenkins/GitLab CI/GitHub Actions(本文以 GitHub Actions 为例)容器化:Docker Docker Compose制品库…...
Jenkins:库博静态工具CI/CD 的卓越之选
在当今快节奏的软件开发领域,高效的持续集成(CI)和持续交付(CD)流程对于项目的成功至关重要。Jenkins 作为开源 CI/CD 软件的领导者,以其强大的功能、丰富的插件生态和高度的可扩展性,成为众多开…...
Maven私服搭建与登录全攻略
目录 1.背景2.简介3.安装4.启动总结参考文献 1.背景 回顾下maven的构建流程,如果没有私服,我们所需的所有jar包都需要通过maven的中央仓库或者第三方的maven仓库下载到本地,当一个公司或者一个团队所有人都重复的从maven仓库下载jar包&#…...
大模型数据分析破局之路20250512
大模型数据分析破局之路 本文面向 AI 初学者、数据分析从业者与企业技术负责人,围绕大模型如何为数据分析带来范式转变展开,从传统数据分析困境谈起,延伸到 LLM MCP 的协同突破,最终落脚在企业实践建议。 🌍 开篇导语…...
数据结构-树(1)
一、树的基本概念 二,树的抽象数据结构 三,树的存储结构 1.双亲表示法 数组存储结点,含数据域和双亲下标(根结点双亲为 - 1) 代码示例 include <stdio.h> #include <stdlib.h>#define MAX_TREE_SIZE 10…...
什么是ERP?ERP有哪些功能?小微企业ERP系统源码,SpringBoot+Vue+ElementUI+UniAPP
什么是ERP? ERP翻译过来叫企业资源计划,通俗的讲,应该叫企业的全面预算控制,其通常包括三个部分:工程预算、投资预算和经营预算(即产销存预算)。之所以做预算控制,是因为企业运作的…...
视觉-语言-动作模型:概念、进展、应用与挑战(上)
25年5月来自 Cornell 大学、香港科大和希腊 U Peloponnese 的论文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 视觉-语言-动作 (VLA) 模型标志着人工智能的变革性进步,旨在将感知、自然语言理解和具体动作统一在一个计…...
C++ 与 Go、Rust、C#:基于实践场景的语言特性对比
目录 编辑 一、语法特性对比 1.1 变量声明与数据类型 1.2 函数与控制流 1.3 面向对象特性 二、性能表现对比编辑 2.1 基准测试数据 在计算密集型任务(如 10⁷ 次加法运算)中: 在内存分配测试(10⁵ 次对象创建…...
RDB和AOF的区别
Redis提供两种主要的持久化机制:RDB(Redis Database)和AOF(Append Only File),它们在数据持久化方式、性能影响及恢复策略上各有特点。以下是两者的对比分析及使用建议: RDB(快照持久…...
因子分析基础指南:原理、步骤与地球化学数据分析应用解析
前言 在看深度学习成矿预测以及地球化学数据分析的文献的时候很多引言部分的内容会提到一些老的技术,正所谓:知其然知其所以然。所以我把关于一些老技术的基础铺垫的内容作为:研究生基础指南部分进行记录。 这部分讲述的是因子分析…...
采用AI神经网络降噪算法的通信语音降噪(ENC)模组性能测试和应用
采用AI降噪的语言通话环境抑制模组性能效果测试 随着AI时代来临.通话设备的环境噪音抑制也进入AI降噪算法时代. AI神经网络降噪技术是一款革命性的语音处理技术,他突破了传统单麦克风和双麦克风降噪的局限性,利用采集的各种日常环境中的噪音样本进行训练学习.让降噪…...
面试题 - Kafka、RabbitMQ、RocketMQ如何选型?
在当今的高并发、大数据时代,系统架构的复杂性呈指数级增长。你是否曾遇到过这样的问题:用户订单提交后,系统响应缓慢甚至卡顿?或者在业务高峰期,消息积压导致系统崩溃? 这些问题的背后,往往隐…...
【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函数
文章目录 一、stack和queue1. 概述2. 使用3. 模拟实现 二、deque三、priority_queue1. 概述和使用2. 模拟实现 四、仿函数 一、stack和queue 1. 概述 我们之前学习的vector和list,以及下面要认识的deque,都属于STL的容器(containers&#x…...
Golang 空结构体特性与用法
文章目录 1.简介2.核心特性2.1 零内存占用2.2 值比较语义2.3 类型隔离2.4 值地址 3.作用3.1 实现集合(Set)3.2 不发送数据的信道3.3 无状态方法接收者3.4 作为 context 的 value 的 key 4.小结参考文献 1.简介 在 Go 语言中,空结构体是一个不…...
企业对数据集成工具的需求及 ETL 工具工作原理详解
当下,数据已然成为企业运营发展过程中的关键生产要素,其重要性不言而喻。 海量的数据分散在企业的各类系统、平台以及不同的业务部门之中,企业要充分挖掘这些数据背后所蕴含的巨大价值,实现数据驱动的精准决策,数据集…...
基于HTTP头部字段的SQL注入:SQLi-labs第17-20关
前置知识:HTTP头部介绍 HTTP(超文本传输协议)头部(Headers)是客户端和服务器在通信时传递的元数据,用于控制请求和响应的行为、传递附加信息或定义内容类型等。它们分为请求头(Request Headers&…...
Megatron系列——流水线并行
内容总结自:bilibili zomi 视频大模型流水线并行 注:这里PipeDream 1F1B对应时PP,Interleaved 1F1B对应的是VPP 1、朴素流水线并行 备注: (1)红色三个圈都为空泡时间,GPU没有做任何计算 &am…...
Android HttpAPI通信问题(待解决)
使用ClearTextTraffic是Android中一项重要的网络设置,它控制了应用程序是否允许在不使用HTTPS加密的情况下访问网络。在默认情况下,usescleartexttraffic的值为true,这意味着应用程序可以通过普通的HTTP协议进行网络通信。然而,这…...
WebFlux vs WebMVC vs Servlet 对比
WebFlux vs WebMVC vs Servlet 技术对比 WebFlux、WebMVC 和 Servlet 是 Java Web 开发中三种不同的技术架构,它们在编程模型、并发模型和适用场景上有显著区别。以下是它们的核心对比: 核心区别总览 特性ServletSpring WebMVCSpring WebFlux编程模型…...
Spring MVC参数传递
本内容采用最新SpringBoot3框架版本,视频观看地址:B站视频播放 1. Postman基础 Postman是一个接口测试工具,Postman相当于一个客户端,可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果。 2. Spring MVC相关注解 3. Spring MVC参数传递 Spri…...
Spring MVC 和 Spring Boot 是如何访问静态资源的?
Spring MVC 和 Spring Boot 在配置静态资源访问方面有所不同,Spring Boot 提供了更便捷的自动配置。 一、Spring Boot 如何配置静态资源访问 (推荐方式) Spring Boot 遵循“约定优于配置”的原则,对静态资源的访问提供了非常方便的自动配置。 默认静态…...
如何应对网站被爬虫和采集?综合防护策略与实用方案
在互联网时代,网站内容被恶意爬虫或采集工具窃取已成为常见问题。这不仅侵犯原创权益,还可能影响网站性能和SEO排名。以下是结合技术、策略与法律的综合解决方案,帮助网站构建有效防护体系。 一、技术防护:阻断爬虫的“技术防线”…...
MySQL 分页查询优化
目录 前言1. LIMIT offset, count 的性能陷阱:为什么它慢?😩2. 优化策略一:基于排序字段的“跳跃式”查询 (Seek Method) 🚀3. 优化策略二:利用子查询优化 OFFSET 扫描 (ID Subquery)4. 基础优化࿱…...
我用Deepseek + 亮数据爬虫神器 1小时做出輿情分析器
我用Deepseek 亮数据爬虫神器 1小时做出輿情分析器 一、前言二、Web Scraper API 实战(1)选择对应的URL(2)点击进入对应url界面(3)API结果实例和爬取结果展示(4)用户直接使用post请…...
langchain4j中使用milvus向量数据库做RAG增加索引
安装milvus向量数据库 官方网址 https://milvus.io/zh 使用docker安装milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中启动milvus sh standalone_emb…...
【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略
🕒 【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热…...
开源 RPA 工具深度解析与官网指引
开源 RPA 工具深度解析与官网指引 摘要 :本文深入解析了多款开源 RPA 工具,涵盖 TagUI、Aibote、Taskt 等,分别介绍了它们的核心功能,并提供了各工具的官网链接,方便读者进一步了解与使用,同时给出了基于不…...
【免杀】C2免杀技术(一)VS设置
一、概述 编译器生成的二进制文件特征(代码结构、元数据、指纹)可能被杀软的静态或动态检测规则匹配。Visual Studio 的构建设置(特别是运行库、编译器优化、链接方式等)会直接影响最终生成的二进制文件的结构、行为特征和依赖关…...
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 编译依赖 相关依赖有 gmp-6.3.0 请依照这篇文章编译 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库…...
Kotlin与Ktor构建Android后端API
以下是一个使用 Kotlin 和 Ktor 构建 Android 后端 API 的详细示例,包含常见功能实现: 1. 项目搭建 (build.gradle.kts) plugins {applicationkotlin("jvm") version "1.9.0"id("io.ktor.plugin") version "2.3.4"id("org.je…...
网页jupyter如何显示jpipvenv虚拟环境
今天使用社区版pycharm编辑.ipynb文件时,发现pycharm编辑.ipynb文件需要订阅。但是发现pipvenv虚拟环境解释器在jupyter中只有一个Python3:ipykernel版本,没有venv和conda的虚拟环境。因此在网上搜寻资料,作为备份记录。 以windows为例 假设目…...
学习黑客5 分钟深入浅出理解Windows System Configuration
5 分钟深入浅出理解Windows System Configuration ⚙️ 大家好!今天我们将探索Windows系统配置——这是Windows操作系统的核心控制中心,决定了系统如何启动、运行和管理各种功能。无论你是计算机初学者,还是在TryHackMe等平台上学习网络安全…...
Spyglass:跨时钟域同步方案
相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 Spyglass可以用于检测设计中的跨时钟域相关问题,确保电路中添加了适当的同步机制,以避免此类问题的发生,例如: 与亚稳…...
Ubuntu虚拟机文件系统扩容
1. 删除所有的虚拟机快照。 2. 选择扩展 将最大大小调整为你所需的大小 3. 进入虚拟机,输入命令: sudo apt install gparted sudo gparted 4. 选择磁盘,右键根分区,选择Resize/Move,调整大小。 5. 调整所需分区大…...
Window、CentOs、Ubuntu 安装 docker
Window 版本 网址:https://www.docker.com/ 下载 下载完成后,双击安装就可以了 Centos 版本 卸载 Docker (可选) yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-log…...
mac M2下虚拟机CentOS 8 安装上安装 Berkeley DB
问题:直接在centos8 yum安装db4-devel失败,只能手工安装 进入home目录,下载 wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz 解压 tar -zxvf db-4.6.21.tar.gz 切到cd db-4.6.21的build_unix下 cd db-4.6.21 cd build_…...
Python文字转语音TTS库示例(edge-tts)
1. 安装 pip install edge-tts2. 命令行使用 # 生成语音文件 # -f:要转换语音的文本文件,例如一个txt文件 # --text:指明要保存的mp3的文本 # --write-media:指明保存的mp3文件路径 # --write-subtitles:指定输出字幕…...
lua入门语法,包含安装,注释,变量,循环等
文章目录 LUA入门什么是lualua安装入门lua的使用方式注释定义变量lua中的数据类型流程控制ifelsewhile语法:for 函数表模块 LUA入门 什么是lua 一种脚本语言,设计的目的是为了能够在一些应用程序提供灵活的扩展功能和定制功能。 lua安装 有linux版本…...
【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词
🌹欢迎来到《小5讲堂》🌹 🌹这是《文心智能体》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正࿰…...
TWASandGWAS中GBS filtering and GWAS(1)
F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯(Ames)ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…...
Linux电源管理(五),发热管理(thermal),温度控制
更多linux系统电源管理相关的内容请看:Linux电源管理、功耗管理 和 发热管理 (CPUFreq、CPUIdle、RPM、thermal、睡眠 和 唤醒)-CSDN博客 本文主要基于linux-5.4.18版本的内核代码进行分析。 1 简介 1.1 硬件知识 CPU等芯片在工作时会产生大量热量,…...
【C++11】异常
前言 上文我们学习到了C11中类的新功能【C11】类的新功能-CSDN博客 本文我们来学习C下一个新语法:异常 1.异常的概念 异常的处理机制允许程序在运行时就出现的问题进行相应的处理。异常可以使得我们将问题的发现和问题的解决分开,程序的一部分负…...
C#WPF里不能出现滚动条的原因
使用下面这段代码,就不能出现滚动条: <mdix:DrawerHost.LeftDrawerContent><Grid Width="260" Background="{StaticResource MaterialDesign.Brush.Primary}"><Grid.RowDefinitions><RowDefinition Height="auto"/>&l…...
安装Hadoop并运行WordCount程序
一、安装 Java Hadoop 依赖 Java,首先需要安装 Java 开发工具包(JDK)。以 Ubuntu 为例: bash sudo apt update sudo apt install openjdk-8-jdk安装后,设置环境变量: bash echo export JAVA_HOME/usr/li…...
从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案
文章目录 前言1. 安装Ollama2.Gemma3模型安装与运行3. 安装Open WebUI图形化界面3.1 Open WebUI安装运行3.2 添加模型3.3 多模态测试 4. 安装内网穿透工具5. 配置固定公网地址总结 前言 如今各家的AI大模型厮杀得如火如荼,每天都有新的突破。今天我要给大家安利一款…...
《数字人技术实现路径深度剖析与研究报告》
《数字人技术实现路径深度剖析与研究报告》 一、引言 1.1 研究背景与意义 近年来,随着人工智能、虚拟现实、计算机图形学等技术的飞速发展,数字人技术应运而生并取得了显著进展。数字人作为一种新兴的技术应用,正逐步渗透到各个领域,成为推动行业创新发展的重要力量。从最…...
《棒球百科》MLB棒球公益课·棒球1号位
MLB(美国职业棒球大联盟)的棒球公益课通过推广棒球运动、普及体育教育,对全球多个地区产生了多层次的影响: 1. 体育文化推广 非传统棒球地区的普及:在棒球基础较弱的地区(如中国、欧洲部分国家)…...