【爬虫开发】爬虫从0到1全知识md笔记第2篇:requests模块,知识点:【附代码文档】

爬虫开发从0到1全知识教程完整教程(附代码资料)主要内容讲述:爬虫课程概要,爬虫基础爬虫概述,爬虫的分类,http协议复习。requests模块,requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. requests模块发送post请求,5. 利用requests.session进行状态保持。数据提取概要,数据提取概述1. 响应内容的分类,2. 认识xml以及和html的区别,1. jsonpath模块的使用场景,2. jsonpath模块的使用方法,3. jsonpath练习,1. 了解 lxml模块和xpath语法。Selenium课程概要selenium的介绍,selenium提取数据。Selenium课程概要,反爬与反反爬selenium的其它使用方法。反爬与反反爬常见的反爬手段和解决思路。反爬与反反爬验证码处理,chrome浏览器使用方法介绍。反爬与反反爬,Mongodb数据库JS的解析,介绍,内容,mongodb文档,Mongodb的介绍和安装,小结。Mongodb数据库介绍,内容,mongodb文档,mongodb的简单使用,小结,Mongodb的的增删改查。Mongodb数据库介绍,内容,mongodb文档,mongodb的聚合操作,2 mongodb的常用管道和表达式,Mongodb的索引操作。Mongodb数据库,scrapy爬虫框架介绍,内容,mongodb文档,mongodb和python交互,小结,介绍。scrapy爬虫框架,scrapy爬虫框架介绍,内容,scrapy官方文档,scrapy的入门使用,小结,介绍。scrapy爬虫框架介绍,内容,scrapy官方文档,scrapy管道的使用,小结,scrapy的crawlspider爬虫。scrapy爬虫框架介绍,内容,scrapy官方文档,scrapy中间件的使用,小结,scrapy_redis概念作用和流程。scrapy爬虫框架介绍,内容,scrapy官方文档,scrapy_redis原理分析并实现断点续爬以及分布式爬虫,小结,scrapy_splash组件的使用。scrapy爬虫框架介绍,内容,scrapy官方文档,scrapy的日志信息与配置,小结,scrapyd部署scrapy项目。利用appium抓取app中的信息,利用appium抓取app中的信息介绍,内容,appium环境安装,介绍,内容,利用appium自动控制移动设备并提取数据。appium环境安装,Mongodb的介绍和安装,小结。scrapy的概念和流程 ,小结,selenium的介绍,常见的反爬手段和解决思路。数据提取概述1. 响应内容的分类,2. 认识xml以及和html的区别,爬虫概述,http协议复习。mongodb的简单使用,小结,scrapy的入门使用,小结。selenium提取数据,利用appium自动控制移动设备并提取数据。验证码处理。数据提取-jsonpath模块1. jsonpath模块的使用场景,2. jsonpath模块的使用方法,3. jsonpath练习,chrome浏览器使用方法介绍,Mongodb的的增删改查,小结。scrapy数据建模与请求,小结,selenium的其它使用方法。数据提取-lxml模块1. 了解 lxml模块和xpath语法,2. 谷歌浏览器xpath helper插件的安装和使用,3. xpath的节点关系,4. xpath语法-基础节点选择语法,5. xpath语法-节点修饰语法,6. xpath语法-其他常用节点选择语法。JS的解析,mongodb的聚合操作,2 mongodb的常用管道和表达式。scrapy模拟登陆,小结,Mongodb的索引操作,小结,scrapy管道的使用,小结。Mongodb的权限管理,小结,scrapy中间件的使用,小结。mongodb和python交互,小结,scrapy_redis概念作用和流程,小结,scrapy_redis原理分析并实现断点续爬以及分布式爬虫,小结。scrapy_splash组件的使用,小结,scrapy的日志信息与配置,小结。scrapyd部署scrapy项目,13.Gerapy,13.Gerapy。1.2.1-简单的代码实现,目标urlscrapy的crawlspider爬虫。

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


全套教程部分目录:


部分文件图片:

requests模块

本阶段课程主要学习requests这个http模块,该模块主要用于发送请求获取响应,该模块有很多的替代模块,比如说urllib模块,但是在工作中用的最多的还是requests模块,requests的代码简洁易懂,相对于臃肿的urllib模块,使用requests编写的爬虫代码将会更少,而且实现某一功能将会简单。因此建议大家掌握该模块的使用

requests模块

知识点:
  • 掌握 headers参数的使用
  • 掌握 发送带参数的请求
  • 掌握 headers中携带cookie
  • 掌握 cookies参数的使用
  • 掌握 cookieJar的转换方法
  • 掌握 超时参数timeout的使用
  • 掌握 ip参数proxies的使用
  • 掌握 使用verify参数忽略CA证书
  • 掌握 requests模块发送post请求
  • 掌握 利用requests.session进行状态保持

前面我们了解了爬虫的基础知识,接下来我们来学习如何在代码中实现我们的爬虫

1. requests模块介绍

requests文档[

1.1 requests模块的作用:

  • 发送http请求,获取响应数据

1.2 requests模块是一个第三方模块,需要在你的python(虚拟)环境中额外安装

  • pip/pip3 install requests

1.3 requests模块发送get请求

  1. 需求:通过requests向百度首页发送请求,获取该页面的源码
  1. 运行下面的代码,观察打印输出的结果

```python

1.2.1-简单的代码实现

import requests

目标url

url = '

向目标url发送get请求

response = requests.get(url)

打印响应内容

print(response.text) ```


知识点:掌握 requests模块发送get请求

2. response响应对象

观察上边代码运行结果发现,有好多乱码;这是因为编解码使用的字符集不同早造成的;我们尝试使用下边的办法来解决中文乱码问题

```python

1.2.2-response.content

import requests

目标url

url = '

向目标url发送get请求

response = requests.get(url)

打印响应内容

print(response.text)

print(response.content.decode()) # 注意这里! ```

  1. response.text是requests模块按照chardet模块推测出的编码字符集进行解码的结果
  2. 网络传输的字符串都是bytes类型的,所以response.text = response.content.decode('推测出的编码字符集')
  3. 我们可以在网页源码中搜索charset,尝试参考该编码字符集,注意存在不准确的情况

2.1 response.text 和response.content的区别:

  • response.text

  • 类型:str

  • 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码

  • response.content

  • 类型:bytes

  • 解码类型: 没有指定

知识点:掌握 response.text和response.content的区别

2.2 通过对response.content进行decode,来解决中文乱码

  • response.content.decode() 默认utf-8
  • response.content.decode("GBK")
  • 常见的编码字符集

  • utf-8

  • gbk
  • gb2312
  • ascii (读音:阿斯克码)
  • iso-8859-1

知识点:掌握 利用decode函数对requests.content解决中文乱码

2.3 response响应对象的其它常用属性或方法

response = requests.get(url)中response是发送请求获取的响应对象;response响应对象中除了text、content获取响应内容以外还有其它常用的属性或方法:

  • response.url响应的url;有时候响应的url和请求的url并不一致
  • response.status_code 响应状态码
  • response.request.headers 响应对应的请求头
  • response.headers 响应头
  • response.request._cookies 响应对应请求的cookie;返回cookieJar类型
  • response.cookies 响应的cookie(经过了set-cookie动作;返回cookieJar类型
  • response.json()自动将json字符串类型的响应内容转换为python对象(dict or list)

```python

1.2.3-response其它常用属性

import requests

目标url

url = '

向目标url发送get请求

response = requests.get(url)

打印响应内容

print(response.text)

print(response.content.decode()) # 注意这里!

print(response.url) # 打印响应的url print(response.status_code) # 打印响应的状态码 print(response.request.headers) # 打印响应对象的请求头 print(response.headers) # 打印响应头 print(response.request._cookies) # 打印请求携带的cookies print(response.cookies) # 打印响应中携带的cookies ```


知识点:掌握 response响应对象的其它常用属性

3. requests模块发送请求

3.1 发送带header的请求

我们先写一个获取百度首页的代码

```python import requests

url = '

response = requests.get(url)

print(response.content.decode())

打印响应对应请求的请求头信息

print(response.request.headers) ```

3.1.1 思考
  1. 对比浏览器上百度首页的网页源码和代码中的百度首页的源码,有什么不同?

  2. 查看网页源码的方法:

    • 右键-查看网页源代码 或
    • 右键-检查
  3. 对比对应url的响应内容和代码中的百度首页的源码,有什么不同?

  4. 查看对应url的响应内容的方法:

    1. 右键-检查
    2. 点击 Net work
    3. 勾选 Preserve log
    4. 刷新页面
    5. 查看Name一栏下和浏览器地址栏相同的url的Response
  5. 代码中的百度首页的源码非常少,为什么?

  6. 需要我们带上请求头信息

    回顾爬虫的概念,模拟浏览器,欺骗服务器,获取和浏览器一致的内容

  7. 请求头中有很多字段,其中User-Agent字段必不可少,表示客户端的操作系统以及浏览器的信息

3.1.2 携带请求头发送请求的方法

requests.get(url, headers=headers)

  • headers参数接收字典形式的请求头
  • 请求头字段名作为key,字段对应的值作为value
3.1.3 完成代码实现

从浏览器中复制User-Agent,构造headers字典;完成下面的代码后,运行代码查看结果

```python import requests

url = '

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

在请求头中带上User-Agent,模拟浏览器发送请求

response = requests.get(url, headers=headers)

print(response.content)

打印请求头信息

print(response.request.headers) ```


知识点:掌握 headers参数的使用

3.2 发送带参数的请求

我们在使用百度搜索的时候经常发现url地址中会有一个 ?,那么该问号后边的就是请求参数,又叫做查询字符串

3.2.1 在url携带参数

直接对含有参数的url发起请求

```python import requests

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

url = '

response = requests.get(url, headers=headers) ```

3.2.2 通过params携带参数字典

​ 1.构建请求参数字典

​ 2.向接口发送请求的时候带上参数字典,参数字典设置给params

```python import requests

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

这是目标url

url = '

最后有没有问号结果都一样

url = '

请求参数是一个字典 即wd=python

kw = {'wd': 'python'}

带上请求参数发起请求,获取响应

response = requests.get(url, headers=headers, params=kw)

print(response.content) ```


知识点:掌握发送带参数的请求的方法

3.3 在headers参数中携带cookie

网站经常利用请求头中的Cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加Cookie,模拟普通用户的请求。我们以github登陆为例:

3.3.1 github登陆抓包分析
  1. 打开浏览器,右键-检查,点击Net work,勾选Preserve log
  2. 访问github登陆的url地址 `
  3. 输入账号密码点击登陆后,访问一个需要登陆后才能获取正确内容的url,比如点击右上角的Your profile访问`
  4. 确定url之后,再确定发送该请求所需要的请求头信息中的User-Agent和Cookie

requests-3-2-1-4

3.3.2 完成代码
  • 从浏览器中复制User-Agent和Cookie
  • 浏览器中的请求头字段和值与headers参数中必须一致
  • headers请求参数字典中的Cookie键对应的值是字符串

```python import requests

url = '

构造请求头字典

headers = { # 从浏览器中复制过来的User-Agent 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36', # 从浏览器中复制过来的Cookie 'Cookie': 'xxx这里是复制过来的cookie字符串' }

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers)

print(resp.text) ```

3.3.3 运行代码验证结果

在打印的输出结果中搜索title,html中的标题文本内容如果是你的github账号,则成功利用headers参数携带cookie,获取登陆后才能访问的页面

requests-3-2-3


知识点:掌握 headers中携带cookie

3.4 cookies参数的使用

上一小节我们在headers参数中携带cookie,也可以使用专门的cookies参数

  1. cookies参数的形式:字典

cookies = {"cookie的name":"cookie的value"}

  • 该字典对应请求头中Cookie字符串,以分号、空格分割每一对字典键值对
  • 等号左边的是一个cookie的name,对应cookies字典的key
  • 等号右边对应cookies字典的value

  • cookies参数的使用方法

response = requests.get(url, cookies)

  1. 将cookie字符串转换为cookies参数所需的字典:

cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')}

  1. 注意:cookie一般是有过期时间的,一旦过期需要重新获取

```python import requests

url = '

构造请求头字典

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36' }

构造cookies字典

cookies_str = '从浏览器中copy过来的cookies字符串'

cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')}

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=cookies_dict)

print(resp.text) ```


知识点:掌握 cookies参数的使用

3.5 cookieJar对象转换为cookies字典的方法

使用requests获取的resposne对象,具有cookies属性。该属性值是一个cookieJar类型,包含了对方服务器设置在本地的cookie。我们如何将其转换为cookies字典呢?

  1. 转换方法

cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)

  1. 其中response.cookies返回的就是cookieJar类型的对象

  2. requests.utils.dict_from_cookiejar函数返回cookies字典


知识点:掌握 cookieJar的转换方法

3.6 超时参数timeout的使用

在平时网上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能任然没有结果。

在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。

  1. 超时参数timeout的使用方法

response = requests.get(url, timeout=3)

  1. timeout=3表示:发送请求后,3秒钟内返回响应,否则就抛出异常

```python import requests

url = ' response = requests.get(url, timeout=3) # 设置超时时间 ```


知识点:掌握 超时参数timeout的使用

3.7 了解以及proxy参数的使用

proxy参数通过指定ip,让ip对应的正向服务器转发我们发送的请求,那么我们首先来了解一下ip以及服务器

3.7.1 理解使用的过程
  1. ip是一个ip,指向的是一个服务器
  2. 服务器能够帮我们向目标服务器转发请求

使用的过程

3.7.2 正向和反向的区别

前边提到proxy参数指定的ip指向的是正向的服务器,那么相应的就有反向服务器;现在来了解一下正向服务器和反向服务器的区别

  1. 从发送请求的一方的角度,来区分正向或反向
  2. 为浏览器或客户端(发送请求的一方)转发请求的,叫做正向

  3. 浏览器知道最终处理请求的服务器的真实ip地址,例如VPN

  4. 不为浏览器或客户端(发送请求的一方)转发请求、而是为最终处理请求的服务器转发请求的,叫做反向

  5. 浏览器不知道服务器的真实地址,例如nginx

3.7.3 ip(服务器)的分类
  1. 根据ip的匿名程度,IP可以分为下面三类:

  2. 透明(Transparent Proxy):透明虽然可以直接“隐藏”你的IP地址,但是还是可以查到你是谁。目标服务器接收到的请求头如下:

python REMOTE_ADDR = Proxy IP HTTP_VIA = Proxy IP HTTP_X_FORWARDED_FOR = Your IP

  • 匿名(Anonymous Proxy):使用匿名,别人只能知道你用了,无法知道你是谁。目标服务器接收到的请求头如下:

python REMOTE_ADDR = proxy IP HTTP_VIA = proxy IP HTTP_X_FORWARDED_FOR = proxy IP

  • 高匿(Elite proxy或High Anonymity Proxy):高匿让别人根本无法发现你是在用,所以是最好的选择。毫无疑问使用高匿效果最好。目标服务器接收到的请求头如下:

python REMOTE_ADDR = Proxy IP HTTP_VIA = not determined HTTP_X_FORWARDED_FOR = not determined

  1. 根据网站所使用的协议不同,需要使用相应协议的服务。从服务请求使用的协议可以分为:

  2. http:目标url为http协议

  3. https:目标url为https协议
  4. socks隧道(例如socks5)等:

    1. socks 只是简单地传递数据包,不关心是何种应用协议(FTP、HTTP和HTTPS等)。
    2. socks 比http、https耗时少。
    3. socks 可以转发http和https的请求
3.7.4 proxies参数的使用

为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,所以我们需要使用ip;那么我们接下来要学习requests模块是如何使用ip的

  • 用法:

python response = requests.get(url, proxies=proxies)

  • proxies的形式:字典

  • 例如:

python proxies = { "http": " "https": " }

  • 注意:如果proxies字典中包含有多个键值对,发送请求时将按照url地址的协议来选择使用相应的ip

知识点:掌握 ip参数proxies的使用

3.8 使用verify参数忽略CA证书

在使用浏览器上网的时候,有时能够看到下面的提示(2018年10月之前的12306网站):

12306ssl错误

  • 原因:该网站的CA证书没有经过【受信任的根证书颁发机构】的认证
  • **[关于CA证书以及受信任的根证书颁发机构点击了解更多](
3.8.1 运行代码查看代码中向不安全的链接发起请求的效果

运行下面的代码将会抛出包含ssl.CertificateError ...字样的异常

python import requests url = " response = requests.get(url)

3.8.2 解决方案

为了在代码中能够正常的请求,我们使用verify=False参数,此时requests模块发送请求将不做CA证书的验证:verify参数能够忽略CA证书的认证

python import requests url = " response = requests.get(url,verify=False)


知识点:掌握 使用verify参数忽略CA证书

4. requests模块发送post请求

思考:哪些地方我们会用到POST请求?

  1. 登录注册( 在web工程师看来POST 比 GET 更安全,url地址中不会暴露用户的账号密码等信息)
  2. 需要传输大文本内容的时候( POST 请求对数据长度没有要求)

所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

4.1 requests发送post请求的方法

  • response = requests.post(url, data)

  • data参数接收一个字典

  • requests模块发送post请求函数的其它参数和发送get请求的参数完全一致

4.2 POST请求练习

下面面我们通过金山翻译的例子看看post请求如何使用:

  1. 地址:[
思路分析
  1. 抓包确定请求的url地址

  1. 确定请求的参数

  1. 确定返回数据的位置

  1. 模拟浏览器获取数据
4.2.3 抓包分析的结论
  1. url地址:`

  2. 请求方法:POST

  3. 请求所需参数:

python data = { 'f': 'auto', # 表示被翻译的语言是自动识别 't': 'auto', # 表示翻译后的语言是自动识别 'w': '人生苦短' # 要翻译的中文字符串 }

  1. pc端User-Agent:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

4.2.4 代码实现

了解requests模块发送post请求的方法,以及分析过移动端的百度翻译之后,我们来完成代码

```python import requests import json

class King(object):

def __init__(self, word):self.url = "self.word = wordself.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}self.post_data = {"f": "auto","t": "auto","w": self.word}def get_data(self):response = requests.post(self.url, headers=self.headers, data=self.post_data)# 默认返回bytes类型,除非确定外部调用使用str才进行解码操作return response.contentdef parse_data(self, data):# 将json数据转换成python字典dict_data = json.loads(data)# 从字典中抽取翻译结果try:print(dict_data['content']['out'])except:print(dict_data['content']['word_mean'][0])def run(self):# url# headers# post——data# 发送请求data = self.get_data()# 解析self.parse_data(data)

if name == 'main': # king = King("人生苦短,及时行乐") king = King("China") king.run() # python标准库有很多有用的方法,每天看一个标准库的使用 ```


知识点:掌握 requests模块发送post请求

5. 利用requests.session进行状态保持

requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。接下来我们就来学习它

5.1 requests.session的作用以及应用场景

  • requests.session的作用

  • 自动处理cookie,即 下一次请求会带上前一次的cookie

  • requests.session的应用场景

  • 自动处理连续的多次请求过程中产生的cookie

5.2 requests.session使用方法

session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie

python session = requests.session() # 实例化session对象 response = session.get(url, headers, ...) response = session.post(url, data, ...)

  • session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致

5.3 课堂测试

使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面

5.3.1 提示
  1. 对github登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包
  2. 确定登陆请求的url地址、请求方法和所需的请求参数

  3. 部分请求参数在别的url对应的响应内容中,可以使用re模块获取

  4. 确定登陆后才能访问的页面的的url地址和请求方法

  5. 利用requests.session完成代码
5.3.2 参考代码

```python import requests import re

构造请求头字典

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36', }

实例化session对象

session = requests.session()

访问登陆页获取登陆请求所需参数

response = session.get(' headers=headers) authenticity_token = re.search('name="authenticity_token" value="(.*?)" />', response.text).group(1) # 使用正则获取登陆请求所需参数

构造登陆请求参数字典

data = { 'commit': 'Sign in', # 固定值 'utf8': '✓', # 固定值 'authenticity_token': authenticity_token, # 该参数在登陆页的响应内容中 'login': input('输入github账号:'), 'password': input('输入github账号:') }

发送登陆请求(无需关注本次请求的响应)

session.post(' headers=headers, data=data)

打印需要登陆后才能访问的页面

response = session.get(' headers=headers) print(response.text) ```


知识点:掌握 利用requests.session进行状态保持

未完待续, 同学们请等待下一期

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

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

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

相关文章

【C++重新认知】:泛型编程(模板编程)

一、什么是泛型编程 当我们设计函数或者类时,有时候需要对应不同数据类型编写相同的代码,这样的话不仅有代码冗余,而且更加的加大程序员开发事件,降低开发效率,因此泛型编程就是解决此类情况----不同的数据类型可以重…

关于在forEach循环中使用异步,造成forEach里面的函数还未执行完毕,外层的同步已经被执行的问题

使用 原生的 for循环替代forEach循环即可解决问题 1.实例代码: select_Father_comment_sql_res.forEach( (item) > {const Select_FId_children_sql util.format("Select *, \IFNULL(User.UserName,) as CommentUserName, \IFNULL(User.UserName,) as AtU…

代码随想录算法训练营Day35|LC860 柠檬水找零LC406 根据身高重建队列LC452 用最少数量的箭引爆气球

一句话总结:身高队列看起来不简单,实际上也很难。 原题链接:860 柠檬水找零 简单贪心思想即可。5元时加入cnt5,10元时cnt10,cnt5--, 20元时则优先找零10元再找零5元,这样最后判断是否在一次找零…

golang+vue微服务电商系统

golangvue微服务电商系统 文章目录 golangvue微服务电商系统一、项目前置准备二、项目简介三、代码GItee地址 golang、vue redis、mysql、gin、nacos、es、kibana、jwt 一、项目前置准备 环境的搭建 官方go开发工程师参考地址:https://blog.csdn.net/qq23001186/cat…

SpringBoot如何优雅的进行参数校验

一、传统参数校验 虽然往事不堪回首,但还是得回忆一下我们传统参数校验的痛点。 下面是我们传统校验用户名和邮箱是否合法的代码 if (username null || username.isEmpty()) {throw new IllegalArgumentException("用户名不能为空"); }if (isValidEmai…

Linux之文件管理与重定向

文件的管理 最开始说到过, 一个进程是可以打开多个文件的并且可以对这些文件做出不同的操作, 也就是说加载到内存中的文件可能存在多个. 操作系统要不要管理这些打开的文件呢? 当我们在程序里面打开多个文件时, 操作系统肯定是得对这些文件进行管理的, 而管理的本质就是对数…

【MySQL】存储过程、存储函数、触发器

目录 存储过程介绍技术背景存储过程的作用与优势存储过程跟自定义函数很像。它们的区别是: 存储过程的缺点存储过程的特性基本存储过程使用1.创建语法语法说明:使用案例1.创建获取新闻类别数量的存储过程2.创建获取指定新闻类别ID下新闻数量的存储过程 2…

【微服务-网关】SpringCloud GateWay核心技术

在前面的文章中我们介绍了微服务网关的基础知识,了解了什么是网关,网关有什么作用,以及市面上有哪些成熟的网关产品,最后了解了网关的配置技巧。通过上篇文章,大家应该可以在微服务架构中完成网关的基本配置。 但是&am…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 (一)基础配置… 3 (二)有线网络配置… 4 (三)无线网络配置… 6 (四&a…

老大语录六 谈产品规划

老大语录六 谈产品规划 产品经理一个重要的职责就是做产品规划。它是考验产品经理对市场和需求的阅读能力,是决定一个产品在市场上跟竞争对手分出高下的必要条件,是最能体现产品经理水平的工作。 然而我们往往在执行过程中在这一步上做的并不是特别好。虽然很多企业都会容易建…

2024 年 5 款适用于 Linux 的参考文献管理软件

时间是宝贵的,因此如果某款软件能让您摆脱必须执行的日常繁琐任务,那么它就会派上用场。 参考文献管理工具就是此类软件的典型代表,只需点击几下就能自动格式化引文。学生、教育工作者、作家、科学家和研究人员一定会发现它们非常有用。 在…

NFTScan | 03.18~03.24 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.03.18~ 2024.03.24 NFT Hot News 01/ NFT 系列 NodeMonkes 地板价已超越 BAYC 3 月 18 日,据数据显示,NFT 系列 NodeMonkes 地板价已超越 Bored Ape Yacht …

9.2024

使用冒泡排序给{10 ,1,35,61,89,36,55}排序 代码&#xff1a; public class 第九题 {public static void main(String[] args) {int a[]{10,1,35,61,89,36,55};for (int i0;i<a.length-1;i){for (int j0;j<a.length-1;j){if (a[j]>a[j1]){int temp0;tempa[j];a[j]a[…

光致发光荧光量子产率测试光纤光谱仪

光致发光荧光量子产率测试系统是一种用于测量材料发光效率的高精度设备&#xff0c;它通过光致发光方法来确定样品的发射效率。光致发光荧光量子产率测试系统不仅提供了一种高效、可靠的测量手段&#xff0c;而且对于提升科学研究和工业应用中的发光材料性能具有重要作用。通过…

nacos集群搭建实战

集群结构图 初始化数据库 Nacos默认数据存储在内嵌数据库Derby中&#xff0c;不属于生产可用的数据库。官方推荐的使用mysql数据库&#xff0c;推荐使用数据库集群或者高可用数据库。 首先新建一个数据库&#xff0c;命名为nacos&#xff0c;而后导入下面的SQL&#xff08;直…

日常刷题之77-组合

题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案 提示&#xff1a;假设 n5,k3 就是需要组合出来&#xff0c;长度3且内容数据是在[1,n]这个区间内的所有可能得组合 同时一个组合里面内个数字只能出现一次&#…

日增500粉的全自动引流神器

全自动引流&#xff0c;采集曝光一体每天截流500&#xff0c;这是每个企业主和网红的终极梦想。今日&#xff0c;我将分享一套高效而可行的引流策略&#xff0c;帮助你实现这个目标。 我们需要理解&#xff0c;全自动引流并不意味着无人参与。相反&#xff0c;它仍需要你的参与…

【王道训练营】第6题 输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no

文章目录 我的代码改正代码其他代码 我的代码 没有完成 #include<stdio.h> int main(){int a;int b;int c0;//位数int d0;//比较几次scanf("%d",&a);while(b!0){bb/10;c;}dc/2;//比较几次int ffor(int i0 ;i<d;i){int ec;//位数fa - a / (((e-i-1)*10…

算法笔记~—位运算

目录 常见位运算&#xff1a; 1、基础位运算 2、对于一个数n。确定、修改这个数n二进制x位。 3、提取&#xff08;确定&#xff09;一个数n最右侧的1&#xff08;bit&#xff09;与干掉最右侧的1&#xff08;bit&#xff09; 4、异或运算律 5、位运算的优先级&#xff1a…

Go --- Go语言垃圾处理

概念 垃圾回收&#xff08;GC-Garbage Collection&#xff09;暂停程序业务逻辑SWT&#xff08;stop the world&#xff09;程序根节点&#xff1a;程序中被直接或间接引用的对象集合&#xff0c;能通过他们找出所有可以被访问到的对象&#xff0c;所以Go程序的根节点通常包括…