Python爬虫从入门到精通:一篇涵盖所有细节的高质量教程

目录

第一部分:Python爬虫基础

1.1 爬虫原理

1.2 Python爬虫常用库

1.3 爬虫实战案例

1.4 注意事项

第二部分:爬虫进阶技巧

2.1 处理动态加载的内容

2.2 登录认证

2.3 分布式爬取

2.4 反爬虫策略

第三部分:爬虫实战项目

3.1 豆瓣电影爬虫

3.2 知乎问答爬虫

3.3 电商网站商品爬虫

第四部分:爬虫注意事项与优化

4.1 反爬虫策略

4.2 异常处理

4.3 性能优化

总结


 

Python爬虫作为数据采集的重要手段,在数据分析、数据挖掘等领域具有广泛的应用。本文将从四个部分详细介绍Python爬虫的原理、常用库、实战案例及注意事项,帮助读者从入门到精通Python爬虫。

b4a9f9216955403c892d98635204f282.jpg

第一部分:Python爬虫基础

1.1 爬虫原理

爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类用户的行为,通过HTTP协议访问网页,获取所需数据。爬虫的主要工作流程如下:

  1. 发送HTTP请求:爬虫向目标网站发送HTTP请求,请求可以包含URL、请求头(Headers)、请求体(Body)等信息。请求头中可以包含User-Agent、Referer等字段,以模拟人类用户的行为。

  2. 接收响应:目标网站服务器处理请求后,返回HTTP响应,响应包括状态码、响应头(Headers)、响应体(Body)等信息。状态码通常用于判断请求是否成功,响应头包含服务器发送的元数据,响应体包含网页内容。

  3. 解析响应:爬虫解析HTTP响应,提取所需数据,如HTML、JSON等。解析HTML时,可以使用BeautifulSoup、lxml等库;解析JSON时,可以使用json等库。

  4. 存储数据:将解析后的数据存储到文件、数据库等。存储数据时,可以选择CSV、JSON、数据库等多种格式。

1.2 Python爬虫常用库

Python有许多用于爬虫的第三方库,以下是一些常用的库:

  1. Requests:用于发送HTTP请求,支持GET、POST等多种请求方法。Requests库的用法非常简单,通过requests.get(url)requests.post(url)即可发送请求。

  2. BeautifulSoup:用于解析HTML和XML文档,提取所需数据。BeautifulSoup可以轻松地解析复杂的HTML结构,并从中提取数据。

  3. lxml:另一个用于解析HTML和XML文档的库,性能较BeautifulSoup更好。lxml支持XPath,可以更方便地定位和提取数据。

  4. Scrapy:一个强大的爬虫框架,支持分布式爬取、数据存储等功能。Scrapy框架提供了丰富的功能,可以方便地构建复杂的爬虫项目。

  5. Selenium:用于模拟浏览器行为,适用于动态加载内容的网站。Selenium可以模拟浏览器的前进、后退、点击等操作,可以爬取那些需要浏览器交互的网站。

1.3 爬虫实战案例

下面通过一个简单的例子来演示如何使用Python爬虫获取百度首页的HTML内容。

import requests
from bs4 import BeautifulSoupurl = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
print(soup.prettify())

在这个例子中,我们首先使用Requests库发送GET请求,获取百度首页的HTML内容。然后,我们使用BeautifulSoup库解析HTML,并打印出解析后的结果。

1.4 注意事项

在进行爬虫时,需要遵守以下原则:

  1. 尊重目标网站的robots.txt文件:在爬取目标网站之前,应该先查看其robots.txt文件,了解哪些内容可以爬取,哪些内容禁止爬取。

  2. 控制访问频率:在爬取目标网站时,应该控制访问频率,避免对目标网站服务器造成过大压力。通常,访问频率控制在每秒不超过5次比较合适。

  3. 遵守目标网站的使用协议:在进行爬虫时,应该遵守目标网站的使用协议,合法合规地获取数据。如果目标网站有API接口,应该优先使用API接口获取数据。

  4. 遵循道德规范:在爬取数据时,应该遵循道德规范,不进行非法操作,不侵犯他人隐私。

通过学习本部分内容,读者应该已经了解了Python爬虫的基本原理、常用库以及注意事项。在接下来的部分,我们将深入学习爬虫的进阶技巧,包括处理动态加载的内容、登录认证、分布式爬取等。

第二部分:爬虫进阶技巧

2.1 处理动态加载的内容

很多网站的内容是通过JavaScript动态加载的,这使得直接使用Requests和BeautifulSoup等库无法获取到完整的网页内容。为了处理这类网站,我们需要使用Selenium或类似的工具。

代码示例:使用Selenium获取动态加载的网页内容

from selenium import webdriver# 创建浏览器对象
driver = webdriver.Chrome()# 访问目标网站
driver.get('https://www.example.com')# 等待动态内容加载完成
driver.implicitly_wait(10)  # 等待10秒# 获取网页内容
html = driver.page_source# 关闭浏览器
driver.quit()# 解析HTML内容
soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())

在这个例子中,我们使用Selenium模拟浏览器访问目标网站,并等待动态内容加载完成。然后,我们获取网页的HTML内容,并使用BeautifulSoup解析HTML。

2.2 登录认证

有些网站需要登录才能访问其内容。在这种情况下,我们需要模拟登录过程,以获取登录后的网页内容。

代码示例:使用Selenium进行登录认证

from selenium import webdriver
from selenium.webdriver.common.keys import Keys# 创建浏览器对象
driver = webdriver.Chrome()# 访问登录页面
driver.get('https://www.example.com/login')# 输入用户名和密码
user_input = driver.find_element_by_name('username')
user_input.send_keys('your_username')
password_input = driver.find_element_by_name('password')
password_input.send_keys('your_password')# 提交登录表单
login_button = driver.find_element_by_name('submit')
login_button.click()# 等待登录成功
driver.implicitly_wait(10)# 获取登录后的网页内容
html = driver.page_source# 关闭浏览器
driver.quit()# 解析HTML内容
soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())

在这个例子中,我们使用Selenium模拟登录过程,包括输入用户名和密码,并提交登录表单。登录成功后,我们获取登录后的网页内容,并使用BeautifulSoup解析HTML。

2.3 分布式爬取

当目标网站的数据量很大,或者需要爬取多个网站时,单线程爬虫的效率可能会很低。这时,我们可以使用分布式爬取技术,将任务分配给多个线程或进程,以提高爬取效率。

代码示例:使用Scrapy进行分布式爬取

# 创建Scrapy项目
scrapy startproject my_spider# 进入项目目录
cd my_spider# 创建爬虫文件
scrapy genspider my_spider example.com# 修改爬虫文件,添加分布式爬取设置
# 在settings.py文件中添加以下设置
DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'
SCHEDULER = 'scrapy.schedulers.Scheduler'
SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'

在这个例子中,我们使用Scrapy创建了一个分布式爬取项目,并修改了settings.py文件以启用分布式爬取。通过这种方式,我们可以将任务分配给多个爬虫实例,从而提高爬取效率。

2.4 反爬虫策略

在实际应用中,目标网站为了保护自身利益,可能会采取各种反爬虫策略。这些策略旨在防止自动化程序快速、大规模地获取网站数据,从而影响网站的正常运营。反爬虫策略包括但不限于验证码、IP限制、频率限制等。为了应对这些策略,我们需要采取相应的应对措施。

代码示例:使用代理IP和User-Agent池

import requests
from random import choice# 代理IP列表
proxies = ['http://10.10.1.10:3128','http://10.10.1.11:8080',# 更多代理IP
]# User-Agent列表
user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'# 更多User-Agent
]# 随机选择代理IP和User-Agent
proxy = choice(proxies)
user_agent = choice(user_agents)# 发送请求,并设置代理和User-Agent
response = requests.get('https://www.example.com', proxies={'http': proxy}, headers={'User-Agent': user_agent})
print(response.text)

在这个例子中,我们使用了一个代理IP列表和一个User-Agent列表。在每次发送请求时,我们随机选择一个代理IP和一个User-Agent,以减少被目标网站识别为爬虫的风险。

代码示例:处理验证码

对于需要验证码的网站,我们可以使用图像识别技术来自动识别验证码,或者使用某些服务来解决验证码问题。这里提供一个简单的验证码识别示例:

from PIL import Image
import pytesseract# 安装Tesseract OCR引擎
# pip install pytesseract# 打开验证码图片
image = Image.open('captcha.png')# 使用Tesseract OCR引擎识别验证码
captcha_text = pytesseract.image_to_string(image, config='--psm 11 --oem 3 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')print(captcha_text)

在这个例子中,我们使用Pillow库打开验证码图片,并使用Tesseract OCR引擎来识别验证码。为了提高识别准确率,我们可以对验证码进行预处理,例如调整亮度、对比度等。

通过学习本部分内容,读者应该已经了解了Python爬虫的进阶技巧,包括处理动态加载的内容、登录认证、分布式爬取以及应对反爬虫策略。在接下来的部分,我们将通过一些实际项目来应用所学知识,如爬取豆瓣电影、知乎问答等。

第三部分:爬虫实战项目

在这一部分,我们将通过一些具体的实战项目来应用前面所学到的Python爬虫知识。这些项目将帮助读者更好地理解如何在实际场景中使用爬虫技术。

3.1 豆瓣电影爬虫

豆瓣电影是一个流行的电影评分和评论网站。我们可以使用爬虫来获取电影信息、评分和评论。

代码示例:爬取豆瓣电影信息

import requests
from bs4 import BeautifulSoup# 豆瓣电影首页URL
url = 'https://movie.douban.com/'# 发送请求
response = requests.get(url)# 解析响应
soup = BeautifulSoup(response.text, 'lxml')# 获取电影列表
movies = soup.find_all('div', class_='item')# 提取电影信息
for movie in movies:title = movie.find('a').get_text()rating = movie.find('div', class_='star').get_text()print(f'电影名称:{title},评分:{rating}')

在这个例子中,我们首先发送请求到豆瓣电影首页,然后使用BeautifulSoup解析HTML,并提取电影名称和评分。

3.2 知乎问答爬虫

知乎是一个知名的问答社区,我们可以使用爬虫来获取热门问题及其答案。

代码示例:爬取知乎热门问题

import requests
from bs4 import BeautifulSoup# 知乎热门问题URL
url = 'https://www.zhihu.com/explore'# 发送请求
response = requests.get(url)# 解析响应
soup = BeautifulSoup(response.text, 'lxml')# 获取热门问题列表
questions = soup.find_all('div', class_='zm-item')# 提取问题信息
for question in questions:title = question.find('h2').get_text()content = question.find('div', class_='zm-item-rich-text').get_text()print(f'问题:{title},内容:{content}')

在这个例子中,我们发送请求到知乎热门问题页面,然后使用BeautifulSoup解析HTML,并提取问题的标题和内容。

3.3 电商网站商品爬虫

许多电商网站提供了丰富的商品信息。我们可以使用爬虫来获取商品的名称、价格、描述等。

代码示例:爬取电商网站商品信息

import requests
from bs4 import BeautifulSoup# 电商网站商品页URL
url = 'https://www.example.com/product/12345'# 发送请求
response = requests.get(url)# 解析响应
soup = BeautifulSoup(response.text, 'lxml')# 获取商品信息
title = soup.find('h1').get_text()
price = soup.find('span', class_='price').get_text()
description = soup.find('div', class_='description').get_text()print(f'商品名称:{title},价格:{price},描述:{description}')

在这个例子中,我们发送请求到电商网站的商品页,然后使用BeautifulSoup解析HTML,并提取商品的名称、价格和描述。

通过学习本部分内容,读者应该已经了解了如何将Python爬虫技术应用于实际项目。在接下来的部分,我们将讨论爬虫的注意事项和优化策略,包括反爬虫策略、异常处理、性能优化等。

第四部分:爬虫注意事项与优化

在这一部分,我们将讨论Python爬虫在实际应用中需要注意的事项和优化策略,以确保爬虫的稳定运行和高效性。

4.1 反爬虫策略

在爬虫过程中,目标网站可能会采取各种反爬虫策略,如验证码、IP限制、频率限制等。为了应对这些策略,我们需要采取相应的应对措施。

代码示例:使用代理IP和User-Agent池

import requests
from random import choice# 代理IP列表
proxies = ['http://10.10.1.10:3128','http://10.10.1.11:8080',# 更多代理IP...
]# User-Agent列表
user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'# 更多User-Agent
]# 随机选择代理IP和User-Agent
proxy = choice(proxies)
user_agent = choice(user_agents)# 发送请求,并设置代理和User-Agent
response = requests.get('https://www.example.com', proxies={'http': proxy}, headers={'User-Agent': user_agent})
print(response.text)

在这个例子中,我们使用了一个代理IP列表和一个User-Agent列表。在每次发送请求时,我们随机选择一个代理IP和一个User-Agent,以减少被目标网站识别为爬虫的风险。

代码示例:处理验证码

对于需要验证码的网站,我们可以使用图像识别技术来自动识别验证码,或者使用某些服务来解决验证码问题。这里提供一个简单的验证码识别示例:

from PIL import Image
import pytesseract# 安装Tesseract OCR引擎
# pip install pytesseract# 打开验证码图片
image = Image.open('captcha.png')# 使用Tesseract OCR引擎识别验证码
captcha_text = pytesseract.image_to_string(image, config='--psm 11 --oem 3 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')print(captcha_text)

在这个例子中,我们使用Pillow库打开验证码图片,并使用Tesseract OCR引擎来识别验证码。为了提高识别准确率,我们可以对验证码进行预处理,例如调整亮度、对比度等。

4.2 异常处理

在爬虫过程中,可能会遇到各种异常情况,如网络连接失败、页面加载超时等。为了保证爬虫的稳定运行,我们需要对异常情况进行处理。

代码示例:使用try-except处理异常

import requestsurl = 'https://www.example.com'try:response = requests.get(url)response.raise_for_status()
except requests.exceptions.HTTPError as e:print(f'HTTP Error: {e}')
except requests.exceptions.ConnectionError as e:print(f'Connection Error: {e}')
except requests.exceptions.Timeout as e:print(f'Timeout Error: {e}')
except requests.exceptions.RequestException as e:print(f'Request Error: {e}')
else:print('请求成功')

在这个例子中,我们使用try-except语句来处理可能出现的异常情况。如果请求成功,我们执行else块中的代码;如果请求失败,我们根据异常类型执行相应的except块中的代码。

4.3 性能优化

为了提高爬虫的效率,我们需要对其进行性能优化。以下是一些常见的性能优化策略:

  1. 使用异步IO:使用如aiohttpasyncio等库来提高爬虫的并发处理能力。

  2. 缓存数据:使用缓存技术,如Redis或Memcached,来存储已获取的数据,避免重复爬取。

  3. 分页爬取:对于大型网站,可以通过分页爬取来逐步获取数据,避免一次性请求过多数据导致服务器压力过大。

  4. 合理设置请求头:在发送请求时,设置合适的User-Agent、Referer等头部信息,以模拟真实用户的行为。

  5. 限速:设置合理的访问频率,避免对目标网站服务器造成过大压力。

  6. 使用分布式爬虫:对于大规模数据爬取任务,可以使用分布式爬虫框架,如Scrapy,将任务分配给多个爬虫实例,提高爬取效率。

  7. 优化数据解析:对于复杂的HTML结构,可以优化数据解析逻辑,提高解析效率。

  8. 代码优化:编写高效的代码,避免不必要的循环和计算,提高程序运行速度。

通过学习本部分内容,读者应该已经了解了Python爬虫在实际应用中需要注意的事项和优化策略。这些策略将帮助我们在实际项目中更好地使用爬虫技术,提高爬虫的稳定性和效率。

总结

本文从Python爬虫的基础知识出发,详细介绍了爬虫原理、常用库、实战案例、注意事项以及优化策略。通过学习本文,读者应该能够全面掌握Python爬虫的原理和实践技巧,为数据采集和处理提供有力支持。在实际应用中,我们需要根据具体情况选择合适的爬虫技术和策略,以达到高效、稳定地获取数据的目的。

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

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

相关文章

【C语言】指针(二)

目录 一、传值调用和传址调用 二、数组名的理解 三、通过指针访问数组 四、一维数组传参的本质 五、指针数组 六、指针数组模拟实现二维数组 一、传值调用和传址调用 指针可以用在哪里呢&#xff1f;我们看下面一段代码&#xff1a; #include <stdio.h>void Swap(i…

基于Spring封装一个websocket工具类使用事件发布进行解耦和管理

最近工作中&#xff0c;需要将原先的Http请求换成WebSocket&#xff0c;故此需要使用到WebSocket与前端交互。故此这边需要研究一下WebSocket到底有何优点和不可替代性&#xff1a; WebSocket优点&#xff1a; WebSocket 协议提供了一种在客户端和服务器之间进行全双工通信的…

异地组网群晖不能访问怎么办?

在日常使用群晖网络储存设备时&#xff0c;我们常常会遇到无法访问的情况&#xff0c;特别是在异地组网时。这个问题很常见&#xff0c;但也很让人困扰。本文将针对异地组网群晖无法访问的问题进行详细解答和分析。 异地组网的问题 在异地组网中&#xff0c;群晖设备无法访问的…

Unity | Spine动画动态加载

一、准备工作 Spine插件及基本知识可查看这篇文章&#xff1a;Unity | Spine动画记录-CSDN博客 二、Spine资源动态加载 1.官方说明 官方文档指出不建议这种操作。但spine-unity API允许在运行时从SkeletonDataAsset或甚至直接从三个导出的资产实例化SkeletonAnimation和Skel…

HNU-算法设计与分析-作业3

第三次作业【动态规划】 文章目录 第三次作业【动态规划】<1>算法实现题 3-1 独立任务最优解问题<2>算法实现题 3-4 数字三角形问题<3>算法实现题 3-8 最小m段和问题<4>算法实现题 3-25 m处理器问题 <1>算法实现题 3-1 独立任务最优解问题 ▲问…

Linux(七) 动静态库

目录 一、动静态库的概念 二、静态库的打包与使用 2.1 静态库的打包 2.2 静态库的使用 三、动态库的打包与使用 3.1 动态库的打包 3.2 动态库的使用 3.3 运行动态库的四种方法 四、总makefile 一、动静态库的概念 静态库&#xff1a; Linux下&#xff0c;以.a为后缀的…

Python专题:十五、JSON数据格式

Python的数据处理&#xff1a;JOSN 计算机的主要工作&#xff1a;处理数据 最容易处理的数据就是结构化数据 非结构化数据&#xff1a;视频&#xff0c;文件等 近些年的大数据、数据挖掘就是对互联网中的各种非结构化的数据的分析和处理 半结构化数据 明确的结构属性&…

陪诊服务运用预约小程序的效果是什么

在中高型城市里&#xff0c;陪诊师近些年也很有热度&#xff0c;已经衍生成为一个新的小众行业&#xff0c;不同医院/不同科目等其它情况针对不同群体往往很难完善&#xff0c;比如部分老年人腿脚不便、不认识字、外地语言难以沟通等&#xff0c;陪诊师的作用就尤为凸显. 对相…

[Bootloader][uboot]code总结

文章目录 1、U_BOOT_DRIVER2、DM框架dm_scan_platdatadm_extended_scan_fdt 1、U_BOOT_DRIVER 使用这个宏可以定义一个驱动实例&#xff0c;宏定义是 其中使用的struct driver结构体 使用的ll_entry_declare宏定义是 归结为 2、DM框架 1、 DM框架 DM模型抽象出了以下四个…

16.投影矩阵,最小二乘

文章目录 1. 投影矩阵1.1 投影矩阵P1.2 投影向量 1. 投影矩阵 1.1 投影矩阵P 根据上节知识&#xff0c;我们知道当我们在解 A X b AXb AXb的时候&#xff0c;发现当向量b不在矩阵A的列空间的时候&#xff0c;我们希望的是通过投影&#xff0c;将向量b投影到矩阵A的列空间中&…

ModuleNotFoundError: No module named ‘sklearn‘

ModuleNotFoundError: No module named sklearn 解决办法&#xff1a; pip install scikit-learn

7B2 PRO主题5.4.2免授权直接安装

B2 PRO 5.4.2 最新免授权版不再需要改hosts&#xff0c;直接在wordpress上传安装即可

Vue的学习 —— <网络请求库Axios>

目录 前言 正文 一、Axios基本概念 二、安装Axios 三、Axios使用方法 四、向服务器发送请求 前言 在之前的开发案例中&#xff0c;我们通常直接在组件中定义数据。但在实际的项目开发中&#xff0c;我们需要从服务器获取数据。当其他用户希望访问我们自己编写的网页时&a…

定档 11.2-3,COSCon'24 第九届中国开源年会暨开源社十周年嘉年华正式启动!

中国开源年会 COSCon 是业界最具影响力的开源盛会之一&#xff0c;由开源社在2015年首次发起&#xff0c;今年将举办第九届。 以其独特定位及日益增加的影响力&#xff0c;COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企业、IT 媒体、行业协会举…

网络安全快速入门(十三)linux及vmware软件的网络配置

13.1 前言 在通过我们前面的了解&#xff0c;我们现在已经对Linux的基础知识有了大致的了解&#xff0c;今天我们来大概讲一下关于linux系统及vmware的网络配置问题&#xff0c;在这之前&#xff0c;我们需要对网络有一个大概的认识和了解&#xff0c;话不多说&#xff0c;我们…

HNU-算法设计与分析-作业5

第五次作业【回溯算法】 文章目录 第五次作业【回溯算法】<1> 算法分析题5-3 回溯法重写0-1背包<2> 算法分析题5-5 旅行商问题&#xff08;剪枝&#xff09;<3> 算法实现题5-2 最小长度电路板排列问题<4> 算法实现题5-7 n色方柱问题<5> 算法实现…

公共字段填充(AOP的使用)

Thread是线程池,ThreadLocal是线程变量,每个线程变量是封闭的,与其它线程变量分隔开来,在sky-common下的com.sky.context包下有一个Basecontext类 public class BaseContext {//每一个上下文创建了一个线程变量,用来存储long类型的id//创建三个方法,用来设置,取用,删除idpubli…

绝地求生:PGS3参赛队伍跳点一览,17压力有点大,4AM与PeRo大概率不roll点

在PCL春季赛结束后&#xff0c;PGS3的参赛队伍名单以及分组就正式确定了&#xff0c;最后确定名额的DDT和NH被安排在了A组和B组&#xff0c;感觉这次PGS3的分组比较均衡&#xff0c;没有“死亡之组”一说。这段时间已经有网友汇总了PGS3队伍在各个地图的跳点&#xff0c;并且把…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

Vmvare—windows中打不开摄像头

1、检查本地摄像头是否能正常打开 设备管理器—查看—显示隐藏设备—选中照相机—启动 USB2.0 HD UVC—打开相机查看 2、检查虚拟机的设置 虚拟机—虚拟机—可移动设备—USB2.0 HD UVC—勾选在状态栏中显示 虚拟机—打开windows主机—右小角选中圆圈图标—勾选连接主机 此时…