Python爬虫的Selenium(学习于b站尚硅谷)

目录

  • 一、Selenium
    •   1.为什么要学习Selenium
      •   (1)什么是Selenium
      •   (2)为什么使用selenium?
      •   (3)代码演示
    •   2. selenium的基本使用
      •   (1)如何安装selenium
      •   (2)selenium的使用步骤
      •   (3)代码的演示(含初次运行时报错的解决办法、selenium获取网页源码的代码)
    •   3.selenium的元素定位
      •   (1)引
      •   (2)元素定位的定义与方法
      •   (3)代码演示
    •   4.selenium的元素信息
      •   (1)访问元素信息
      •   (2)代码演示
    •   5.selenium的交互
      •   (1)交互
      •   (2)代码演示
  • 二、Phantomjs
    •   1. Phantomjs的基本使用
      •   (1)什么是Phantomjs
      •   (2)如何使用Phantomjs
      •   (3)代码演示
  • 三、Headless
    •   1. Headless的基本使用
      •   (1)什么是Headless
      •   (2)配置
      •   (3)代码的演示

  说明:该文章是学习 尚硅谷在B站上分享的视频 Python爬虫教程小白零基础速通p51-104而记录的笔记,笔记来源于本人,关于python基础可以去CSDN上阅读本人学习黑马程序员的笔记。 若有侵权,请联系本人删除。笔记难免可能出现错误或笔误,若读者发现笔记有错误,欢迎在评论里批评指正。 请合法合理使用爬虫,不爬取任何涉密以及涉及隐私的内容,合理控制请求次数,爬取的内容未经授权请不要用于商用,保护自己,免受牢狱之灾。
在这里插入图片描述
  在学习urllib、解析的时候,我们都是模拟浏览器向服务器发送请求,这样做,数据或多或少有一些数据缺失甚至是无法获取数据,这是由于“模拟浏览器”的行为导致的,会有各种反爬手段判断收到的请求是否是爬虫程序,此时就要引入Selenium,进而驱动真实的浏览器。当然,Selenium存在速度有点慢,效率不够高的问题,当然这也是能解决的,故引入Phantomjs。
  还有一点需要说明,跟着b站视频学习到最后,发现好几个程序在使用selenium操控浏览器时,最后并没有关闭浏览器,大家在学习时可以加上下面的一句代码。

# 关闭浏览器
browser.quit()

一、Selenium

  1.为什么要学习Selenium

  (1)什么是Selenium

在这里插入图片描述

  (2)为什么使用selenium?

  模拟浏览器功能,自动执行网页中的js代码,实现动态加载。

  (3)代码演示

  本次将要演示urllib获取京东(“https://www.jd.com/”)的网页源码,从而说明使用的urllib获取京东的网页源码会缺失秒杀的一些数据,进而引入下一节将要使用的selenium。
在这里插入图片描述
  在PyCharm中创建文件夹“爬虫的Selenium”,创建文件“076_为什么要学习selenium.py”。
在这里插入图片描述
  使用的urllib获取京东的网页源码,搜索秒杀中的数据,发现确实是少了秒杀的内容。因此,下一节将学习并说明selenium能驱动真实浏览器去获取数据,不会缺少内容。

"""
为什么要学习selenium
- 使用urllib爬取爬取京东的网页源码
- 发现京东能检测到该请求是否来源于真实的浏览器
"""
import urllib.request# 请求地址
url = 'https://www.jd.com/'
# 请求头
headers = {'User-Agent': 'ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Tri-dent/4.0; Hot Lingo 2.0)'
}
# 请求对象定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 读取网页源码
content = response.read().decode('UTF-8')
# 打印
print(content)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  2. selenium的基本使用

  (1)如何安装selenium

在这里插入图片描述
  安装具体步骤如下:①准备需要的浏览器驱动,本人使用的是Edge浏览器,故需要准备和浏览器相同版本的驱动,具体为:先查看浏览器的版本号,再去“https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/”中下载一个版本号相同的浏览器驱动。然后对下载的文件进行解压,再将其中的exe文件复制到文件夹“爬虫的Selenium”中。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  ②安装第三方包selenium,具体为:打开命令提示符,将当前目录切换到文件夹Scripts中,使用安装指令“pip install selenium==3.141.0 -i https://pypi.mirrors.ustc.edu.cn/simple/”后等待一会儿即可安装完成(注意:此处下载selenium时请指定老版本,即3.141.0,不然后续操作可能会出现问题)。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  (2)selenium的使用步骤

在这里插入图片描述

  (3)代码的演示(含初次运行时报错的解决办法、selenium获取网页源码的代码)

  尴尬,之前创的文件“076_为什么要学习selenium.py”的编号写错了,应在PyCharm中选中该文件后,使用重命名快捷键Shift+F6,然后改为“077_为什么要学习selenium.py”。
在这里插入图片描述
  创建文件“078_selenium的基本使用.py”。
在这里插入图片描述
  如下编写代码,运行后报错。查询半天后(“https://blog.csdn.net/weixin_60535956/article/details/131660133”),发现这是由于selenium版本和urllib3版本不兼容导致的。

"""
selenium的基本使用
"""
# (1)导入selenium
from selenium import webdriver# (2)创建浏览器操作对象
path = "msedgedriver.exe"  # 驱动文件的路径 
browser = webdriver.Edge(path)  # 创建浏览器
# (3)访问网站
# 访问地址
url = 'https://www.baidu.com'
# 浏览器打开网址
browser.get(url)

在这里插入图片描述
  然后,如下图,去修改urllib3的版本为1.26.2,再次运行就好使了。
在这里插入图片描述在这里插入图片描述
  等待一会,安装完成。
在这里插入图片描述
  之后,就可以正常运行程序了。
在这里插入图片描述
  如下继续编写代码,发现selenium获取的京东的网页源码就有秒杀的数据。可见,由于selenium是直接驱动真实浏览器的,不会导致数据的损失。(注:如果还没有获取到秒杀数据,需要加点延时,即代码中的“time.sleep(3)”,然后在网页打开时且在延时时间内滑动浏览器将京东的秒杀数据加载出来)

"""
selenium的基本使用
"""
# (1)导入selenium
from selenium import webdriver
import time# (2)创建浏览器操作对象
path = "msedgedriver.exe"  # 驱动文件的路径 
browser = webdriver.Edge(path)  # 创建浏览器
# (3)访问网站
# # 访问地址
# url = 'https://www.baidu.com'
# # 浏览器打开网址
# browser.get(url)# 将网址改成京东
url = 'https://www.jd.com/'
# 浏览器打开网址
browser.get(url)
# 延时加载一会儿网页,以便获取完整的网页源码
time.sleep(3)# (4)获取网页源码     browser.page_source
content = browser.page_source
# 打印
print(content)

在这里插入图片描述

  3.selenium的元素定位

  (1)引

  如下图所示,如果我们需要使用程序在百度(“https://www.baidu.com/”)中输入“周杰伦”,然后点击“百度一下”,会跳到一个新的页面。其中,使用程序找到“百度一下”的过程称为元素定位。
在这里插入图片描述

  (2)元素定位的定义与方法

在这里插入图片描述
  其实,上面的方法可以改成只记方法find_element/find_elements,这两个方法的语法相同,只是是寻找一个元素还是所有元素的差别,具体使用方法如下:

# 元素定位
# 根据id找到"百度一下"
button = browser.find_element(by='id', value='su')
print(button)# 根据name找到搜索框
button = browser.find_element(by='name', value='wd')
print(button)# 根据xpath路径寻找“百度一下”
button = browser.find_element(by='xpath', val-ue='/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input')
print(button)# 根据标签名字获取对象
button = browser.find_elements(by='tag name', value='input')
print(button)# 使用bs4的语法来获取对象
button = browser.find_elements(by="css selector", value='#su')
print(button)# 寻找链接文本(对应html的a标签)
button = browser.find_element(by='link text', value='地图')
print(button)

  (3)代码演示

  创建文件“079_selenium的元素定位.py”。
在这里插入图片描述
  如下编程,熟悉使用元素定位的方法,具体根据id、name等属性、xpath路径、bs4路径、标签名字、链接名字来寻找元素对象。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

"""
selenium的元素定位的演示
"""
from selenium import webdriver# 浏览器驱动的路径
path = 'msedgedriver.exe'
# 创建浏览器对象
browser = webdriver.Edge(path)
# 百度的地址
url = 'https://www.baidu.com/'
# 访问地址
browser.get(url)# 元素定位
# 根据id找到"百度一下"
button = browser.find_element(by='id', value='su')
print(button)# 根据name找到搜索框
button = browser.find_element(by='name', value='wd')
print(button)# 根据xpath路径寻找“百度一下”
button = browser.find_element(by='xpath', val-ue='/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input')
print(button)# 根据标签名字获取对象
button = browser.find_elements(by='tag name', value='input')
print(button)# 使用bs4的语法来获取对象
button = browser.find_elements(by="css selector", value='#su')
print(button)# 寻找链接文本(对应html的a标签)
button = browser.find_element(by='link text', value='地图')
print(button)

在这里插入图片描述

  4.selenium的元素信息

  (1)访问元素信息

获取元素属性
  .get_attribute(‘class’)
获取元素文本
  text
获取标签名
  tag_name

  (2)代码演示

  如下图所示,本次想要获取元素“百度一下”对应的属性class的值、标签名、和“新闻”的元素文本。
在这里插入图片描述在这里插入图片描述
  创建文件“080_selenium的元素信息.py”。
在这里插入图片描述
  如下编程,熟悉元素信息的语法。

"""
selenium的元素信息
"""
from selenium import webdriverpath = 'msedgedriver.exe'  # 浏览器驱动的路径
browser = webdriver.Edge(path)  # 创建浏览器驱动
url = 'https://www.baidu.com/'  # 访问地址
browser.get(url)  # 浏览器驱动打开地址# 根据id找到“百度一下”
input = browser.find_element(by='id', value='su')# 获取标签的属性
result = input.get_attribute('class')
print(result)
# 获取标签的名字
result = input.tag_name
print(result)# 根据元素文本获取相应的链接
input = browser.find_element(by='link text', value='新闻')
# 获取元素文本
result = input.text
print(result)

在这里插入图片描述

  5.selenium的交互

  (1)交互

点击:click()
输入:send_keys()
后退操作:browser.back()
前进操作:browser.forword()
模拟JS滚动:
  js=‘document.documentElement.scrollTop=100000’
  browser.execute_script(js) 执行js代a码
获取网页代码:page_source
退出:browser.quit()

  (2)代码演示

  如下图,本次需要通过程序使浏览器使用百度搜索“周杰伦”,然后点到第2页,再使用一下后退、前进操作,然后再滚动到页末。
在这里插入图片描述
  创建文件“081_selenium的交互.py”。
在这里插入图片描述
  在编程时,需要知道百度搜索框的id为“kw”,“百度一下”的id为“su”,搜索后元素“下一页”含有class=“n”,当然,其他标签可能具有相同class的属性值,故可以打开xpath插件进行验证,然后在PyCharm中使用xpath路径定位到该元素。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  如下完成编程并运行。

"""
selenium的交互
"""
import timefrom selenium import webdriver# 创建浏览器对象
path = 'msedgedriver.exe'
browser = webdriver.Edge(path)# 访问地址
url = 'https://www.baidu.com/'
# 打开地址
browser.get(url)
# 睡眠2s
time.sleep(2)# 获取文本框对象
input = browser.find_element(by='id', value='kw')
# 在文本框中输入“周杰伦”
input.send_keys('周杰伦')
# 睡眠2s
time.sleep(2)# 获取“百度一下”的按钮
button = browser.find_element(by='id', value='su')
# 点击“百度一下”的按钮
button.click()
# 睡眠2s
time.sleep(2)# 滑倒底部
js_bottom = 'document.documentElement.scrollTop=100000'  # 距离顶部的距离为100,000
browser.execute_script(js_bottom)  # 执行操作
# 睡眠2s
time.sleep(2)# 获取下一页的按钮
next = browser.find_element(by='xpath', value='//a[@class="n"]')
# 点击下一页
next.click()
# 睡眠2s
time.sleep(2)# 回退到上一页
browser.back()
# 睡眠2s
time.sleep(2)# 前进
browser.forward()
# 睡眠2s
time.sleep(2)# 退出浏览器
browser.quit()

在这里插入图片描述

二、Phantomjs

  1. Phantomjs的基本使用

  在前面的学习中,发现Selenium,每次执行过程中都需打开浏览器、关闭浏览器、中间还有一堆操作,这是因为它有页面,而页面里面会有js、css等等很多文件,因此打开页面会导致代码的性能很慢。因此提出Phantomjs、Chrome handless,目前Phantomjs已逐渐淘汰。

  (1)什么是Phantomjs

(1)是一个无界面的浏览器
(2)支持页面元素查找,js的执行等
(3)由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多

  (2)如何使用Phantomjs

(1)获取Phantomjs.exe文件路径path
(2)browser= webdriver.PhantomJs(path)
(3)browser.get(url)
扩展:保存屏幕快照:browser.save_screenshot(‘baidu.png’)

  具体步骤:①到网站中“https://phantomjs.org/download.html”下载文件“phantomjs.exe”。然后将该文件进行解压,再复制其中的文件“phantomjs.exe”,到文件夹“爬虫的Selenium”中进行粘贴。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  ②然后就可以到PyCharm中去编写使用Phantomjs的代码了。

  (3)代码演示

  创建文件“082_phantomjs的基本使用.py”。
在这里插入图片描述
  创建文件夹“082_phantomjs的基本使用”。
在这里插入图片描述
  如下编程并运行。只是有红字警告,告诉我们Phantomjs已经停更。

"""
phantomjs的基本使用
"""
from selenium import webdriver
import timepath = 'phantomjs.exe'
browser = webdriver.PhantomJS(path)
url = 'https://www.baidu.com'
browser.get(url)# 拍张快照
browser.save_screenshot('./082_phantomjs的基本使用/baidu.png')
# 睡眠2s
time.sleep(1)input = browser.find_element(by='id', value='kw')
input.send_keys('昆凌')time.sleep(1)
browser.save_screenshot('./082_phantomjs的基本使用/kunling.png')

在这里插入图片描述

三、Headless

  1. Headless的基本使用

  (1)什么是Headless

  如下图,Edge也有 Headless,且与Chrome类似。
在这里插入图片描述
  经过半天的尝试与搜索,终于发现Edge的无头浏览器的正确使用方法(“https://huaweicloud.csdn.net/63808b3ddacf622b8df8a37e.html”)。首先,需要如下图所示,将selenium的版本更新到4.3.0及以上(本人安装的4.3.0),3开头的版本是不支持无头的Edge浏览器的。它的配置与Chrome也不一样。需要说明的是,本节关于Chrome的截图使用的selenium版本为3.141.0。
在这里插入图片描述
在这里插入图片描述

  (2)配置

  下图是无头的Chrome浏览器的配置,在使用时,将它复制到程序中,然后根据实际安装的Chrome浏览器的位置填写路径。之后再根据selenium的语法完成相应的功能。
在这里插入图片描述
  Edge的配置与Chrome不一样,具体如下(不过使用方法相同):

from selenium import webdriver  # 导入selenium库
from selenium.webdriver.edge.options import Options  # 导入浏览器设置相关的类# 无可视化界面设置
edge_options = Options()
# 使用无头模式
edge_options.add_argument('--headless')
# 禁用GPU,防止无头模式出现莫名的BUG
edge_options.add_argument('--disable-gpu')
# 将参数传给浏览器
browser = webdriver.Edge(options=edge_options)

  (3)代码的演示

  创建文件“083_无头浏览器的使用.py”。
在这里插入图片描述
  如下编写代码,学会无头浏览器的使用。

"""
无头浏览器的使用
"""
from selenium import webdriver  # 导入selenium库
from selenium.webdriver.edge.options import Options  # 导入浏览器设置相关的类# 封装的headless
def share_browser():# 无可视化界面设置edge_options = Options()# 使用无头模式edge_options.add_argument('--headless')# 禁用GPU,防止无头模式出现莫名的BUGedge_options.add_argument('--disable-gpu')# 将参数传给浏览器browser = webdriver.Edge(options=edge_options)return browserbrowser = share_browser()
# 启动浏览器
url = "https://baidu.com"
browser.get(url)
browser.save_screenshot('baidu.png')# 关闭浏览器
browser.quit()

在这里插入图片描述
  好了,本章的笔记到此结束,谢谢大家阅读。

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

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

相关文章

MySQL5.7源码编译Debug版本

编译环境Ubuntu22.04LTS 1 官方下载MySQL源码 https://dev.mysql.com/downloads/mysql/?spma2c6h.12873639.article-detail.4.68e61a14ghILh5 2 安装基础软件 cmakeclangpkg-configperl 参考:https://dev.mysql.com/doc/refman/5.7/en/source-installation-prere…

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…

MySQL: Failed to Connect to MySQL at XXXX:3306 with user root

客户端连接MySQL服务器&#xff0c;报错&#xff1a; 解决方案&#xff1a; 没有让root用户远程登录&#xff0c;需要设置&#xff1b; 进入MySQL服务器&#xff0c;修改一下 # mysql -h localhost -uroot -P3306 -p12345678 mysql: [Warning] Using a password on the comm…

IoTDB 1.x 开启外部访问

对于部署的IoTDB数据库&#xff0c;如果需要局域网内其他设备进行访问的处理。 1、防火墙开放端口 无论windows还是liunx都需要你将6667默认的端口加入防火墙中&#xff0c;否则肯定是无法访问端口 2、修改配置文件 对conf/iotdb-datanode.properties文件中的 修改为本机的…

【ChatGPT 指令大全】怎么使用ChatGPT来帮我们写作

在数字化时代&#xff0c;人工智能为我们的生活带来了无数便利和创新。在写作领域&#xff0c;ChatGPT作为一种智能助手&#xff0c;为我们提供了强大的帮助。不论是作文、文章&#xff0c;还是日常函电&#xff0c;ChatGPT都能成为我们的得力助手&#xff0c;快速提供准确的文…

‘vue’不是内部或外部命令,也不是可运行的程序或批处理文件的原因及解决方法

今天我在用node.js的时候&#xff0c;结果出现如下错误&#xff1a; C:\Users\xiesj> vue -v vue不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 原因&#xff1a; 1、确定npm是否已正确安装&#xff1f; 2、确定vue以及vue-cli已正确安装&#xff1f;…

COCOS项目运行的时候图片模糊的原因

1、首先。用X坐标来分析&#xff0c;如果size*Anchor Position有小数&#xff0c;如上图57*0.5667695.5。这样就会导致x模糊。如果y同样计算结果包含小数&#xff0c;那么y也会模糊。xy同时模糊的情况是最模糊的。 2、如果当前node没有问题&#xff0c;那么就要检查上级node是…

@ControllerAdvice注解使用及原理探究 | 京东物流技术团队

最近在新项目的开发过程中&#xff0c;遇到了个问题&#xff0c;需要将一些异常的业务流程返回给前端&#xff0c;需要提供给前端不同的响应码&#xff0c;前端再在次基础上做提示语言的国际化适配。这些异常流程涉及业务层和控制层的各个地方&#xff0c;如果每个地方都写一些…

CD4029计数器实测仿真及BCD转七段码

前面的博文中&#xff0c;我们介绍过CD40110(这是一个常见的直接接7段数码管的计数器&#xff0c;我们这里介绍一款新的计数器CD4029&#xff0c;这也是很常见的计数器&#xff0c;不同的是后者可以输出BCD编码。 文章目录 一、总体效果二、CD4029的管脚和功能介绍1、芯片功能简…

【CSS】旋转中的视差效果

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

【算法|数组】快慢指针

算法|数组——快慢指针 引入 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你…

图像的平移变换之c++实现(qt + 不调包)

1.基本原理 设dx为水平偏移量&#xff0c;dy为垂直偏移量&#xff0c;则平移变换的坐标映射关系为下公式&#xff0c;图像平移一般有两种方式。 1.不改变图像大小的平移&#xff08;一旦平移&#xff0c;相应内容被截掉&#xff09; 1&#xff09;当dx > width、dx < -wi…

hive编译报错整理

背景 最近在修hive-1.2.0的一个bug&#xff0c;需要修改后重新打包部署到集群&#xff0c;打包的时候报下面的错误&#xff0c;原因很简单&#xff0c;从远程仓库里面已经拉不到这个包了。 org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde was not found in http…

用 docker 创建 jmeter 容器,能做性能测试?

我们都知道&#xff0c;jmeter 可以做接口测试&#xff0c;也可以用于性能测试&#xff0c;现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具&#xff0c;可以创建一个容器&#xff0c;然后把项目放到容器中&#xff0c;就可以构建出一个独立的…

基于react-native的简单消息确认框showModel

基于react-native的简单消息确认框showModel 效果示例图组件代码ShowModel/index.jsx使用案例device.js安装线性渐变色 效果示例图 组件代码ShowModel/index.jsx import React, {forwardRef, useImperativeHandle, useState} from react; import {View,Text,Modal,TouchableOp…

安全防御(3)

1.总结当堂NAT与双机热备原理&#xff0c;形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统&#xff0c;它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则&#xff0c;用于检测和警告可能存在的入侵行为。签名过滤器可以根…

4.2 Windows终端数据安全

数据参考&#xff1a;CISP官方 目录 系统备份与还原数据备份数据粉碎数据加密 一、系统备份与还原 为什么需要系统备份 系统越用越慢系统故障导致不稳定系统无法登录 系统备份重新部署 (重装系统、重置系统) 丟失配置&#xff0c;需要重新配置个人数据丢失的风险 系统…

MySQL数据库基础

目标&#xff1a; 1.数据库操作&#xff1a;创建数据库&#xff0c;删除数据库 2.常用数据类型 3.表的操作&#xff1a;创建表&#xff0c;删除表 数据库操作 &#xff08;1&#xff09;显示数据库 show databases&#xff1b; &#xff08;2&#xff09;创建数据库 创建一个…

论文笔记:SUPERVISED CONTRASTIVE REGRESSION

2022arxiv的论文&#xff0c;没有中&#xff0c;但一作是P大图班本MIT博&#xff0c;可信度应该还是可以的 0 摘要 深度回归模型通常以端到端的方式进行学习&#xff0c;不明确尝试学习具有回归意识的表示。 它们的表示往往是分散的&#xff0c;未能捕捉回归任务的连续性质。…

【C++】右值引用

文章目录 右值引用值得形式返回对象的缺陷移动语句移动赋值 右值引用 能够取地址、能够被修改的被称之为左值。 不能够取地址、不能够被修改、以及将亡值被称之为右值。 普通类型的变量&#xff0c;因为有名字&#xff0c;可以取地址&#xff0c;都认为是左值。const修饰的常量…