11. requests.post()函数访问网页(小白入门)

news2024/11/15 11:33:47

11. requests.post()函数访问网页(小白入门)

文章目录

  • 11. requests.post()函数访问网页(小白入门)
    • 1. 常用的http请求方法
    • 2. requests.post()语法
    • 3. 确定请求网址和请求方法
    • 4. 开发者工具中的Fetch/XHR表示什么
    • 5. requests.post()访问网页实操
      • 5.1 导入库,随机生成一个User-Agent
      • 5.2 定义url
      • 5.3 发送网络请求
    • 6. 开发者工具里的payload是什么?
    • 7. 获取数据
      • 7.1 r.text返回HTTP响应的内容(字符串类型的数据)
      • 7.2 将Unicode编码数据转换回原编码字符串类型数据
      • 7.3 r.json()返回HTTP响应的内容(json数据)
    • 8. 调用对象的方法和属性的语法知识回顾
      • 8.1 调用对象的属性
      • 8.2 调用对象的方法
    • 9. response.text和response.json()的区别
    • 10. 常见的response对象的方法
    • 11. requests.get()和requests.post()的区别
    • 12. requests.post请求框架
    • 13. 完整代码

1. 常用的http请求方法

爬虫的第一步是发送网络请求。

在第2节中我们学习了用requests.get()方法发送网络请求。

【代码示例】

# 1. 导入库
import requests

# 2. 定义url
url = 'https://www.baidu.com/'

# 3. 发送网络请求
# r是变量名,数据类型为Response对象
# requests库名
# get方法名,作用是发送网络请求
# url 要访问的网址
r = requests.get(url)  

# 访问网页后返回一个Response对象
# 变量r的数据类型为Response对象
print(type(r))

# 打印响应内容
print(r)

【终端输出】

<class 'requests.models.Response'>
<Response [200]>

<class ‘requests.models.Response’>表示返回的是一个Response对象。

返回<Response [200]>表示发送请求成功。

发送网络请求除了get方法我们还有其他的请求方法。

【requests常用的http请求方法如下】

  1. GET:获取资源,通常用于读取数据。
  2. POST:提交数据,通常用于创建或更新资源。
  3. PUT:更新资源,通常用于更新数据。
  4. DELETE:删除资源,通常用于删除数据。
  5. HEAD:获取资源的元数据,通常用于检查资源是否存在或是否被修改。
  6. OPTIONS:获取资源支持的HTTP方法和其他元数据。
  7. TRACE:回显服务器收到的请求,通常用于调试和测试。
  8. CONNECT:建立与服务器的隧道,通常用于代理服务器或SSL加密连接。

2. requests.post()语法

post和get一样,也能实现向服务器发送网络请求。

requests.post()是一个HTTP的POST请求方法,用于向指定的URL发送POST请求。

【语法】

requests.post(url, data=None, json=None, headers=None, cookies=None, auth=None, timeout=None)

【参数说明】

  • url:请求的URL地址。
  • data:请求的数据,可以是字典、元组列表、文件对象等。
  • json:请求的JSON数据。
  • headers:请求头,可以是字典类型。
  • cookies:请求的cookies,可以是字典类型。
  • auth:认证信息,可以是元组类型。
  • timeout:请求超时时间,单位为秒。

3. 确定请求网址和请求方法

以访问百度翻译网页为例。

【要访问的网址】

url = 'https://fanyi.baidu.com/'

【网页分析】

备注:这里我用的是谷歌浏览器。

  1. 输入网址打开【百度翻译】首页。

在这里插入图片描述

  1. 按【F12】进入开发者模式。

  2. 点击网络【Network】。

  3. 点击【Fetch/XHR】。

  4. 在搜索框中输入要翻译的单词【ajax】。

  5. 点击名称【Name】栏。

  6. 点击最下方的【sug】。

为什么是最下方的【sug】呢,后面有解答。

  1. 点击-【Headers】-【general】。

在这里插入图片描述

【Request URL】后面的是请求网址https://fanyi.baidu.com/sug

【Request Method】后面的是请求方法post

【温馨提示】

大家多试几个单词,会发现无论我们翻译哪个单词,这个【Request URL】都是不会变的。

当我们看到请求方法是get时,我们需要用requests.get()来访问网页。

当我们看到请求方法是post时,我们需要用requests.post()来访问网页。

【总结】

在写每一个爬虫程序之前,大家对照上面的步骤先进行网页分析。

首先确定要请求的网址和请求的方法。

4. 开发者工具中的Fetch/XHR表示什么

【Ajax】

Ajax:网页异步更新技术。

Ajax(Asynchronous JavaScript and XML),直译为“异步的JavaScript与XML技术”,是一种创建交互式网页应用的网页开发技术,用于创建快速动态网页。

与传统的Web应用相比,Ajax通过浏览器与服务器进行少量的数据交换就可以实现网页的异步更新,在不重新加载整个网页的情况下,即可对网页进行更新。

Ajax的本质是使用XMLHttpRequest(XHR)对象来请求数据,而XMLHttpRequest(XHR)对象是通过事件的模式来实现返回数据的处理。

【Fetch】

Fetch被称为下一代Ajax技术,采用Promise方式来处理数据。

用于替代XMLHttpRequest(XHR),它提供了更简单、更强大的方式来进行网络请求。

【开发者工具中的Fetch/XHR】

Fetch/XHR是指浏览器中的网络请求工具,用于向服务器发送HTTP请求并获取响应。
在开发者工具中,Fetch/XHR可以用来查看网络请求的详细信息,包括请求的URL、请求方法、请求头、请求体、响应状态码、响应头、响应体等。

5. requests.post()访问网页实操

【爬虫框架】

# 1.导入库
# 2.定义要访问的url
# 3.向服务器发送网络请求
# 4.获取数据

5.1 导入库,随机生成一个User-Agent

爬虫程序的第一部分通常都是导入我们爬虫所需要的库。

为了安全,我通常都是使用fake_useragent库随机生成一个请求头User-Agent。

【代码示例】

# 导入fake_useragent库中的UserAgent类
from fake_useragent import UserAgent

# 实例化UserAgent类创建一个UserAgent对象
# 实例化对象语法:对象 = 类名( )
# ua为对象名
# UserAgen为类名
ua = UserAgent()

# 实例化类后得到一个对象
# ua是一个UserAgent对象
print('ua是一个UserAgent对象:',ua)

# 调用ua的random方法,获取随机的User-Agent头部信息 
# 调用方法语法:对象.方法名( )
# ua对象名
# random方法名
print('ua.random随机生成一个User-Agent头部信息:',ua.random)

# 查看ua.random的数据类型
print('ua.random的数据类型为:',type(ua.random))

【终端输出】

ua是一个UserAgent对象: <fake_useragent.fake.FakeUserAgent object at 0x000001A3951655B0>
ua.random随机生成一个User-Agent头部信息: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
ua.random的数据类型为: <class 'str'>

上面的代码我做了详细的解析,方便初学者了解每个变量、每行代码的作用。

去掉注释,代码可简写如下:

【随机生成一个User-Agent】

from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
# 用生成的信息作为字典的值,构建一个字典
header = {'User-Agent':ua.random}
print(header)

【终端输出】

{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.9200'}

【代码解析】

header = {'User-Agent':ua.random}

构建一个字典存储请求头信息,字典名为header。

注意这里的字典的值和键数据类型都必须是字符串类型。

字典的键为'User-Agent',注意有引号。

字典的值为ua.random,是一个随机生成的字符串。

之所以构建字典是后面访问网页传参时需要的是字典类型。

5.2 定义url

网页的请求方式为get时,我们可以使用浏览器里的url。

在这里插入图片描述

网页的请求方式为post时,我们所需的url是【Headers】下【Request URL】后面的网址。

url = 'https://fanyi.baidu.com/sug'

在这里插入图片描述

5.3 发送网络请求

# 1.导入库
import requests
from fake_useragent import UserAgent

# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r= requests.post(url, headers=header, data = data_dict)
print(r)

【终端输出】

<Response [200]>

【代码解析】

data_dict = { 'kw':'ajax'}

data_dict变量名,数据类型为字典。

'ajax'字典的值,是我们需要翻译的单词。

'kw'字典的键。

【查找字典的键】

字典的键kw是怎么来的呢?

  1. 回到网页开发者模式。

  2. 点击最后一个【sug】。

  3. 点击【payload】。

下方出现的kw就是我们字典的键。

在这里插入图片描述

在【payload】界面下,大家点击一下前几个【sug】,观察【payload】下的内容,发现:

  • 第1个【sug】显示的是-kw: a
  • 第2个【sug】显示的是-kw: aj
  • 第3个【sug】显示的是-kw: aja
  • 第4个【sug】显示的是-kw: ajax

现在应该明白为什么点击最后一个【sug】了。

  1. 点击预览【preview】可以查看服务器返回的翻译结果,也就是我们要爬取的内容。

在这里插入图片描述

r = requests.post(url, headers=header, data = data_dict)
  • r是变量名,存储的是访问网页后返回的response对象。
  • requests访问网页的库。
  • post访问网页的方法。
  • url要访问的网址。
  • headers是请求头参数,这里我们将前面随机生成的请求头赋值给变量headers。
  • data是请求的数据,可以是字典、元组列表、文件对象等。这里将要翻译的单词存储到字典中赋值给参数data。

6. 开发者工具里的payload是什么?

payload:有效荷载。

payload是指在进行网络请求时,发送给服务器的数据。
在开发者工具中,可以查看请求的payload,以便开发者调试和优化代码。
Payload通常是以JSON格式发送的,包含了请求的参数和数据。
例如,在发送一个POST请求时,payload可能包含表单数据、文件数据或者其他需要传递给服务器的数据。
开发者可以在开发者工具中查看请求的payload,以便确认数据是否正确发送到服务器。

7. 获取数据

7.1 r.text返回HTTP响应的内容(字符串类型的数据)

# 1.导入库
import requests
from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r = requests.post(url, headers=header, data = data_dict)

# 4. 获取数据
print(r.text)

【终端输出】

{"errno":0,"data":[{"k":"Ajax","v":"n. \u5168\u79f0\u4e3a\u201cAsynchronous JavaScript and XML\u201d\uff08\u5f02\u6b65JavaScri"}]}

【代码解析】

print(r.text)
  • r是访问网页后返回的response对象。
  • .text是response对象多个属性中的一个。
  • r.text输出的是网页源代码,返回的数据类型为字符串类型。

观察输出结果,发现返回的是Unicode编码数据。

7.2 将Unicode编码数据转换回原编码字符串类型数据

要将Unicode编码数据转换回原编码字符串类型数据,需要使用Python的encode()及decode()方法。

encode [ɪnˈkəʊd]:编码。

decode[ˌdiːˈkəʊd]:解码。

假设有一个Unicode编码字符串,要将其转换为原编码字符串类型数据,可以使用以下代码:

【举例说明】

unicode_str = '\u4f60\u597d'
original_str = unicode_str.encode('raw_unicode_escape').decode('unicode_escape')
print(original_str)

【终端输出】

你好

【代码解析】

unicode_str = '\u4f60\u597d'

定义一个Unicode字符串unicode_str。

Unicode编码中,\u4f60表示\u597d表示

original_str = unicode_str.encode('raw_unicode_escape').decode('unicode_escape')
  • original_str是变量名,用于存储解码后的字符。
  • unicode_str是上面定义的变量名。
  • encode是方法名,作用是编码。
  • 'raw_unicode_escape'转换方式。
  • decode是方法名,作用是解码。
  • 'unicode_escape'转换方式。
encode('raw_unicode_escape')
  • 使用encode方法将Unicode字符串转换为原始字符串,编码格式为raw_unicode_escape
  • 这个编码格式会将Unicode字符转换为类似\xhh的形式,其中hh表示字符的16进制编码。
  • 例如,\u4f60会被转换为\x4f\x60。
decode('unicode_escape')
  • 使用decode方法将编码后的字符串转换回原始字符串,编码格式为unicode_escape
  • 这个编码格式会将\xhh形式的字符转换为对应的Unicode字符。
  • 例如,\x4f\x60会被转换回\u4f60。
print(original_str)

将原始字符串打印出来,输出结果为你好

【爬虫数据转换】

# 1.导入库
import requests
from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r = requests.post(url, headers=header, data = data_dict)

# 4. 获取数据
print('*****转换前的输出结果*****')
print(r.text)
print('*****转换后的输出结果*****')
print(r.text.encode('raw_unicode_escape').decode('unicode_escape'))

【终端输出】

*****转换前的输出结果*****
{"errno":0,"data":[{"k":"Ajax","v":"n. \u5168\u79f0\u4e3a\u201cAsynchronous JavaScript and XML\u201d\uff08\u5f02\u6b65JavaScri"}]}
*****转换后的输出结果*****
{"errno":0,"data":[{"k":"Ajax","v":"n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri"}]}

进行转换后就变成我们能看懂的数据了。

除了转换这样的方法外,我们通过json方法也能获取我们能看得懂的数据。

7.3 r.json()返回HTTP响应的内容(json数据)

对上面的代码进行修改,用r对象的json方法来获取数据。

# 1.导入库
import requests
from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r = requests.post(url, headers=header, data = data_dict)

# 4. 获取数据
print(r.json())
print(type(r.json()))

【终端输出】

{'errno': 0, 'data': [{'k': 'Ajax', 'v': 'n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri'}]}
<class 'dict'>

【代码解析】

print(r.json())
  • r是访问网页后返回的response对象。
  • json是response对象多个方法中的一个。
  • r.json()将获取到的数据以json数据格式返回。
  • print(r.json())能输出对象的内容。

【预览服务器返回的内容】

在这里插入图片描述

【代码输出的内容如下】

{
    'errno': 0, 
    'data': [
        {
            'k': 'Ajax', 
            'v': 'n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri'}
            ]
    }

注意输出的是一个字典类型的数据。

现在输出的结果就是服务器返回的响应内容。

【提取我们所需的数据】

# 1.导入库
import requests
from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r = requests.post(url, headers=header, data = data_dict)

# 4. 获取数据
print(r.json()['data'][0]['v'])

【终端输出】

n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri

下面的内容是print(r.json)后输出的结果,得到的是一个字典类型的数据。

{
    'errno': 0, 
    'data': [
        {
            'k': 'Ajax', 
            'v': 'n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri'}
            ]
    }

【字典取值语法回顾】

字典的值=字典名[键名]

my_dict = {'name': '安迪', 'age': 18, 'city': '云南'}
print(my_dict['name'])  # 输出:安迪
print(my_dict['age'])   # 输出:18
print(my_dict['city'])  # 输出:云南

【终端输出】

安迪
18
云南

【代码解析】

print(r.json()['data'])

【终端输出】

[{'k': 'Ajax', 'v': 'n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri'}]
  • r.json()得到的是一个字典类型的数据。
  • ['data']取到字典的键data所对应的值。
  • 所对应的值是一个列表。
print(r.json()['data'][0])

【终端输出】

{'k': 'Ajax', 'v': 'n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri'}
  • [0]取出列表的第一个元素。
  • 第1个元素是字典,字典里有2个键值对。
print(r.json()['data'][0]['v'])

【终端输出】

n. 全称为“Asynchronous JavaScript and XML”(异步JavaScri

['v']取出字典的键v所对应的值,就是我们最终要的结果。

8. 调用对象的方法和属性的语法知识回顾

8.1 调用对象的属性

【语法】

对象名.属性名

【示例】

r.text
  • r是对象名。
  • .英文小圆点。
  • text属性。

8.2 调用对象的方法

对象名.方法名(参数)

r.json( ) 
  • r是对象名。
  • .英文小圆点。
  • json对象的方法名。
  • ()英文圆括号。

【语法总结】

  • 对象 = 类名( )
  • 对象.方法()
  • 对象.属性

9. response.text和response.json()的区别

  • text是对象的属性。
  • json是对象的方法。

response.text返回的是HTTP响应的内容,是一个字符串类型的数据。

response.json返回的也是HTTP响应的内容,是一个JSON格式的数据。

通常情况下,如果响应的内容是JSON格式的数据,我们会使用response.json方法来解析响应内容,方便我们对数据进行处理和操作。

如果响应的内容不是JSON格式的数据,我们可以使用response.text方法来获取响应内容。

10. 常见的response对象的方法

  1. response.write():向客户端发送数据。

  2. response.end():结束响应过程。

  3. response.setHeader():设置响应头。

  4. response.getHeader():获取响应头。

  5. response.removeHeader():移除响应头。

  6. response.statusCode():设置响应状态码。

  7. response.statusMessage():设置响应状态消息。

  8. response.redirect():重定向到另一个URL。

  9. response.sendFile():发送文件到客户端。

  10. response.json():发送JSON数据到客户端。

  11. response.render():渲染模板并发送到客户端。

  12. response.cookie():设置cookie。

  13. response.clearCookie():清除cookie。

  14. response.download():下载文件到客户端。

11. requests.get()和requests.post()的区别

  1. 请求方式不同:requests.get()是GET请求,requests.post()是POST请求。

  2. 参数传递方式不同:requests.get()的参数是通过URL中的查询字符串传递的,而requests.post()的参数是通过请求体中的表单数据传递的。

  3. 安全性不同:由于requests.get()的参数是通过URL传递的,因此可能会被拦截或篡改,而requests.post()的参数是通过请求体传递的,相对更加安全。

  4. 适用场景不同:requests.get()适用于获取数据,而requests.post()适用于提交数据,如登录、注册等操作。

【总结】

  • 我把网页数据比作某个食品店里的食品。
  • 服务器是老板。
  • 客户端就是顾客。
  • get请求就是老板把全部食品打包给你,可以理解成给你了一个旺旺大礼包。
  • post请求是你知道店里卖什么,然后你告诉老板我只买旺旺雪饼,其他的都不要。

在这里插入图片描述

  • get请求是把所有的都给你,你拿回去挑选你所需要的,先取后选。
  • post请求是先告诉老板你想要的,只买走自己需要的,先选后取。

12. requests.post请求框架

【代码示例】

import requests
from fake_useragent import UserAgent
ua = UserAgent()
header = {'User-Agent':ua.random}

# 需要替换成你要访问的网址
url = 'https://httpbin.org/post'

# 需要替换成你要提交的数据
data = {'key1': 'value1', 'key2': 'value2'}

r = requests.post(url, data=data, headers=header)

print('*****r.text输出内容如下*****')
print(r.text)
print('*****r.json()输出内容如下*****')
print(r.json())      

【终端输出】

*****r.text输出内容如下*****
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "key1": "value1", 
    "key2": "value2"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.6) Gecko/20040206 Firefox/0.8", 
    "X-Amzn-Trace-Id": "Root=1-64999271-1bdea6c85981c4db4e76f4c4"
  }, 
  "json": null, 
  "origin": "106.61.21.12", 
  "url": "https://httpbin.org/post"
}

*****r.json()输出内容如下*****
{'args': {}, 'data': '', 'files': {}, 'form': {'key1': 'value1', 'key2': 'value2'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '23', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.6) Gecko/20040206 Firefox/0.8', 'X-Amzn-Trace-Id': 'Root=1-64999271-1bdea6c85981c4db4e76f4c4'}, 'json': None, 'origin': '106.61.21.12', 'url': 'https://httpbin.org/post'}

13. 完整代码

# 1.导入库
import requests
from fake_useragent import UserAgent
# 实例化类
ua = UserAgent()
# ua.random随机生成一个User-Agent头部信息
header = {'User-Agent':ua.random}

# 2. 定义请求url
url = 'https://fanyi.baidu.com/sug'

# 3. 发送网络请求
data_dict = { 'kw':'ajax'}
r = requests.post(url, headers=header, data = data_dict)

# 4. 获取数据
print('*****调用text属性输出结果*****')
print(r.text)

print('*****unicode编码转后的输出结果*****')
print(r.text.encode('raw_unicode_escape').decode('unicode_escape'))

print('*****调用json方法输出结果*****')
print(r.json())

print('*****提取json中的数据*****')
print(r.json()['data'][0]['v'])

有问题可私信小主!!!

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

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

相关文章

Linux磁盘不足,解决办法

解决 一 查看 Linux大于1G的文件 命令 sudo find / -type f -size 1G -exec ls -lh {} \; 解决 二 清理docker的日志 Docker日志可能会占用大量的磁盘空间。可以使用以下命令清理Docker日志&#xff1a; sudo truncate -s 0 /var/lib/docker/containers/*/*json.log 解决…

5G无线帧结构与空口资源

时域资源分配< Time Domain Resource Allocation > 下表指示了传送SS/PBCH的第一个OFDM符号号码&#xff0c;基于TS38.213-4.1 cell search。 1. 子载波间隔 Numerology - Subcarrier Spacing 在载波间隔subcarrier spacing和时域的符号长度symbol length方面&#xff…

Kafka可视化平台EFAK搭建及使用

文章目录 1.EFAK可视化平台介绍2.搭建EFAK可视化平台2.1.安装JDK环境2.2.安装MySQL数据库2.3.下载EAK二进制安装包并部署2.4.配置EFAK连接Zookeeper集群2.5.调整Eagle启动文件中的变量信息2.6.启动EFAK可视化平台 3.使用EFAK可视化平台3.1.登陆EFAK可视化平台3.2.EFAK仪表盘展示…

智云通CRM:识破客户在谈判中的十大谎言

智云通CRM系统是一款专为企业打造的客户管理系统&#xff0c;可以有效帮助企业进行客户关系管理、数据分析和数字化转型。在销售过程中&#xff0c;客户谈判是不可避免的环节。然而&#xff0c;客户在谈判中经常会说一些谎言&#xff0c;以获取更有利的交易条件。对于销售人员来…

【Docker】Docker Desktop更换非C盘符(减轻占用率)

Win10中的Docker Desktop调整到其他盘符&#xff0c;由于新版本已经不让修改软连接了&#xff0c;只好另谋策略&#xff0c;最终还是改成功了。 出现问题 使用软连接修改 上面代码我们可以科幻的理解一下 幻想破灭 //TODO 用户点击执行安装 if(检查文件夹是否软连接){有则&a…

ThinkPHP6基础使用

ThinkPHP6基础使用 前言1.基础1.1 开启调试模式1.2测试运行1.3单应用模式和多应用模式区别1.4安装视图1.5模板渲染1.6模板赋值 总结 前言 这里的操作可能有点难懂&#xff0c;没关系的&#xff0c;只需要了解大致的框架构造就可以了 1.基础 1.1 开启调试模式 通过create-proje…

springboot+vue在线外卖点餐系统,附源码,数据库

今天要和大家聊的是基于springbootvue在线外卖点餐系统 源码下载地址&#xff1a; https://download.csdn.net/download/gdutxiaoxu/87651066 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 …

酷开科技携手京东深入布局投影赛道

沉浸式观影&#xff0c;需要氛围感。大屏幕&#xff0c;大空间&#xff0c;才能让人有身临其境之感&#xff0c;居家生活想要更大的屏幕&#xff0c;除了大屏电视&#xff0c;就要数投影仪了。一部投影仪&#xff0c;再加上充足的空间&#xff0c; 就能够投满整面墙&#xff0c…

第44步 深度学习图像识别:ResNet50建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;ResNet50 ResNet50是一种深度学习模型&#xff0c;由微软研究院的研究人员在2015年提出。"ResNet"的全称是"Residual Network"&#xff0c;意为"残差网络"&#xff0c;"…

WPS 智能办公体验官公测-附申请链接

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 WPS 智能办公体验官官网步骤1:填写申请表单&#xff1a;步骤2:获取兑换码&#xff1a; AI办公时代 WPS大家都了解就不再多介绍了&#xff0c;个人还是很期待的&#xff0c;可以申请体验一波。 WPS 智能…

“京津冀现代商贸物流金融创新实践基地”揭牌成立

来源 | 廊坊银行 在6月17日举办的京津冀现代商贸物流金融创新发展论坛上&#xff0c;“京津冀现代商贸物流金融创新实践基地”正式授牌。据介绍&#xff0c;这是目前京津冀区域内首个商贸物流金融创新实践基地。中国物流与采购联合会会长何黎明、廊坊市现代商贸物流领导小组办…

G2. Teleporters (Hard Version)(二分)

Problem - 1791G2 - Codeforces 这道题给定一个数轴上的点 0,1,...,n1&#xff0c;其中每个点 i (1 ≤ i ≤ n) 都有一个传送门。在第 i 个点&#xff0c;你可以进行以下操作&#xff1a; 向左移动一格&#xff1a;花费 1 个金币。 向右移动一格&#xff1a;花费 1 个金币。 使…

同时配置cuda11.0和11.1环境

同时配置cuda11.0和11.1环境 背景思路流程电脑环境确认确认位置安装新CUDA环境1、执行cuda.exe2. 配置环境变量 安装cudnn 背景 【在电脑上安装多个版本的cuda】&#xff1a;电脑已经安装好了cuda11.0&#xff0c;由于mmdetection版本不匹配&#xff0c;所以想要再安装cuda11.…

【Java】 Java 中函数式接口的使用

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://www.runoob.com/java/java8-functional-interfaces.html https://www.cnblogs.com/dgwblog/p/11739500.html https://www.developer.com/java/java-functional-interfaces/ 接口是定义一组方法及其签名的契约。…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第五章 密码学基础上)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、密码学概述1、密码学的历史2、密码学的基本术语 二、密码学基本概念1、基本概念2、密码系统的安全性3、密码体制的分类4、密码体制的攻击 三、古典密码学四、对称密码算法…

Debezium系列之:监控 Debezium 实例

Debezium系列之&#xff1a;监控 Debezium 实例 一、概述二、实现步骤三、执行四、打开Grafana UI五、关闭集群 Debezium JMX相关的技术博客&#xff1a; Debezium系列之&#xff1a;安装jmx导出器监控debezium指标Debezium系列之&#xff1a;为Debezium集群JMX页面增加监控&a…

UE4/5动画系列(4.足部ik制作)

目录 前期准备 添加虚拟骨骼 ​编辑 腿部函数&#xff1a; 前肢&#xff1a; ​编辑 盆骨函数&#xff1a; 后肢&#xff1a; 进入动画图表&#xff1a; 前期准备 首先准备一个后期处理动画蓝图 然后【因为笔者之前的大象因为不知明原因崩溃&#xff0c;这里就不展示如何…

蓝桥杯专题-试题版-【圆的面积】【字符串对比】【字母图形】【核桃的数量】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

如何用机器学习做淘宝用户画像分析?

用户画像&#xff0c;即用户信息标签化&#xff0c;就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后&#xff0c;完美抽象出一个用户的商业全貌是企业应用大数据技术的基本方式。 用户画像为企业提供了足够的信息基础&#xff0c;能够帮助企业…

ChatGPT最新版带来的多功能批量写作工具激发您的创作

随着人工智能的不断发展&#xff0c;ChatGPT最新版作为一款多功能批量写作工具&#xff0c;为创作者们带来了前所未有的创作体验。它能够通过自然语言处理和机器学习技术&#xff0c;生成高质量的文章、故事、对话等内容&#xff0c;为创作者们提供了无限的创作灵感和可能性。本…