Python的那些事第十六篇:Python的网络爬虫技术
基于Python的网络爬虫技术研究与应用
摘要
随着互联网的飞速发展,网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、项目结构、数据提取与存储等方面的深入探讨,结合具体实例,展示了如何高效地构建网络爬虫项目,以满足不同场景下的数据采集需求。本文的研究成果为网络爬虫技术的应用提供了实践指导,同时也为相关领域的研究提供了参考。

一、引言
网络爬虫是一种自动获取网络信息的程序或脚本,它通过模拟用户浏览器的行为,向目标网站发送HTTP请求,获取网页内容,并从中提取有价值的数据。随着大数据时代的到来,网络爬虫技术在数据分析、机器学习、商业智能等领域得到了广泛应用。Python作为一种简洁高效的编程语言,提供了丰富的库和框架,使得网络爬虫的开发变得更加容易和高效。本文将重点介绍Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库和Scrapy框架,并通过具体实例展示如何使用这些工具构建高效的爬虫项目。
二、网络爬虫基础
(一)网络爬虫的工作原理
网络爬虫的工作原理主要包括以下几个步骤:
-
初始化:设置爬虫的目标网站、起始URL等参数。
-
发送请求:模拟用户浏览器的行为,向目标网站发送HTTP请求。
-
获取响应:接收目标网站返回的HTTP响应,通常为HTML文档。
-
解析文档:对HTML文档进行解析,提取其中的有价值数据。
-
存储数据:将提取的数据存储到本地文件、数据库或其他存储介质中。
-
循环处理:根据需要,重复上述步骤,直到完成所有数据的采集。
(二)网络爬虫的分类
根据不同的分类标准,网络爬虫可以分为以下几种类型:
-
通用爬虫:用于大规模采集互联网上的信息,如搜索引擎爬虫。
-
聚焦爬虫:针对特定主题或特定网站进行数据采集。
-
增量式爬虫:只采集新增或更新的内容,避免重复采集。
-
深度优先爬虫:优先采集深度较深的页面。
-
广度优先爬虫:优先采集同一层级的页面。
三、基于Requests库的网络爬虫
(一)Requests库简介
Requests是一个Python第三方库,用于发送HTTP请求。它简单易用,支持多种HTTP方法(如GET、POST、PUT、DELETE等),并且可以方便地处理请求头、请求参数、Cookie等。以下是Requests库的主要功能特点:
-
简洁易用:提供简洁的API,方便发送HTTP请求。
-
支持多种HTTP方法:支持GET、POST、PUT、DELETE等常用HTTP方法。
-
自动处理Cookie:自动管理Cookie,方便处理登录等需要Cookie的场景。
-
支持会话对象:通过Session对象可以保持会话状态,方便多次请求。
(二)发送HTTP请求
以下是一个使用Requests库发送GET请求的示例代码:
import requests# 目标URL
url = 'https://www.example.com'# 发送GET请求
response = requests.get(url)# 打印响应状态码
print('状态码:', response.status_code)# 打印响应内容
print('响应内容:', response.text)
(三)获取响应内容
Requests库返回的响应对象(Response)包含了丰富的信息,可以通过以下属性和方法获取:
-
response.status_code:获取响应状态码。 -
response.text:获取响应内容(HTML文档)。 -
response.headers:获取响应头信息。 -
response.cookies:获取响应中的Cookie信息。
以下是一个完整的示例代码,展示如何获取响应的详细信息:
import requests# 目标URL
url = 'https://www.example.com'# 发送GET请求
response = requests.get(url)# 获取响应状态码
print('状态码:', response.status_code)# 获取响应内容
print('响应内容:', response.text)# 获取响应头信息
print('响应头信息:', response.headers)# 获取响应中的Cookie信息
print('Cookie信息:', response.cookies)
(四)处理请求参数
在实际应用中,我们常常需要向目标网站发送请求参数,例如查询关键词、分页参数等。Requests库支持通过params参数传递请求参数。以下是一个示例代码:
import requests# 目标URL
url = 'https://www.example.com/search'# 请求参数
params = {'q': 'Python','page': 1
}# 发送GET请求
response = requests.get(url, params=params)# 打印响应内容
print('响应内容:', response.text)
(五)处理请求头
有些网站会对请求头进行检查,以防止爬虫访问。Requests库可以通过headers参数设置请求头,模拟正常浏览器的访问行为。以下是一个示例代码:
import requests# 目标URL
url = 'https://www.example.com'# 请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}# 发送GET请求
response = requests.get(url, headers=headers)# 打印响应内容
print('响应内容:', response.text)
(六)处理Cookie
有些网站需要登录后才能访问某些页面,Requests库可以通过cookies参数设置Cookie,或者通过Session对象自动管理Cookie。以下是一个示例代码:
import requests# 目标URL
url = 'https://www.example.com/login'# 登录数据
data = {'username': 'your_username','password': 'your_password'
}# 发送POST请求
session = requests.Session()
response = session.post(url, data=data)# 访问登录后的页面
response = session.get('https://www.example.com/dashboard')# 打印响应内容
print('响应内容:', response.text)
四、基于BeautifulSoup库的HTML文档解析
(一)BeautifulSoup库简介
BeautifulSoup是一个Python库,用于解析HTML和XML文档。它提供了简单易用的API,可以方便地提取文档中的数据。以下是BeautifulSoup库的主要功能特点:
-
支持多种解析器:支持HTML、XML等多种解析器。
-
灵活的解析方式:可以通过标签名、属性、CSS选择器等方式提取数据。
-
自动处理HTML文档:自动修复HTML文档中的错误。
(二)解析HTML文档
以下是一个使用BeautifulSoup解析HTML文档的示例代码:
from bs4 import BeautifulSoup# HTML文档
html_doc = """
<html><head><title>示例页面</title></head><body><h1>欢迎来到示例页面</h1><p>这是一个段落。</p><a href="https://www.example.com">示例链接</a></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 打印解析后的HTML文档
print(soup.prettify())
(三)提取数据
BeautifulSoup提供了多种方法来提取HTML文档中的数据,以下是一些常用的方法:
-
find():查找第一个匹配的标签。 -
find_all():查找所有匹配的标签。 -
select():通过CSS选择器查找标签。
以下是一个示例代码,展示如何使用这些方法提取数据:
from bs4 import BeautifulSoup# HTML文档
html_doc = """
<html><head><title>示页面例</title></head><body><h1>欢迎来到示例页面</h1><p>这是一个段落。</p><a href="https://www.example.com">示例链接</a><div class="example">示例内容</div></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 查找第一个<h1>标签
h1_tag = soup.find('h1')
print('第一个<h1>标签:', h1_tag.text)# 查找所有<p>标签
p_tags = soup.find_all('p')
for p in p_tags:print('段落内容:', p.text)# 使用CSS选择器查找<div>标签
div_tag = soup.select_one('.example')
print('示例内容:', div_tag.text)
(四)处理HTML文档中的注释和特殊标签
HTML文档中可能会包含注释、特殊标签等,BeautifulSoup可以正确处理这些内容。以下是一个示例代码:
from bs4 import BeautifulSoup
from bs4.element import Comment# HTML文档
html_doc = """
<html><head><title>示例页面</title></head><body><h1>欢迎来到示例页面</h1><!-- 这是一个注释 --><p>这是一个段落。</p><script>alert('这是一个脚本');</script></body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 查找注释
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
for comment in comments:print('注释内容:', comment)# 查找脚本标签
script_tag = soup.find('script')
print('脚本内容:', script_tag.text)
五、基于Scrapy框架的网络爬虫
(一)Scrapy框架简介
Scrapy是一个基于Python的开源爬虫框架,用于构建高效的网络爬虫项目。它提供了丰富的功能,包括请求发送、响应处理、数据提取、数据存储等。以下是Scrapy框架的主要功能特点:
-
高效:支持异步请求,提高爬虫效率。
-
可扩展:支持自定义扩展,方便根据需求进行定制。
-
灵活:支持多种数据提取方式,包括XPath、CSS选择器等。
-
易于维护:项目结构清晰,方便维护和扩展。
(二)构建Scrapy爬虫项目
1. 安装Scrapy
在构建Scrapy爬虫项目之前,需要先安装Scrapy。可以通过以下命令安装Scrapy:
pip install scrapy
2. 创建Scrapy项目
创建Scrapy项目的基本命令如下:
scrapy startproject myproject
执行上述命令后,会在当前目录下生成一个名为myproject的项目文件夹,其目录结构如下:
myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.pymyspider.py
-
scrapy.cfg:项目的配置文件。 -
myproject/:项目的Python模块。-
__init__.py:Python模块初始化文件。 -
items.py:定义爬取的数据结构。 -
middlewares.py:定义中间件。 -
pipelines.py:定义数据存储管道。 -
settings.py:定义项目的设置。 -
spiders/:存放爬虫脚本的目录。
-
3. 定义爬取的数据结构
在items.py文件中定义爬取的数据结构。以下是一个示例代码:
import scrapyclass MyprojectItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
4. 编写爬虫脚本
在spiders/目录下创建一个爬虫脚本,例如myspider.py。以下是一个示例代码:
import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.xpath('//p/text()').extract()yield item
5. 配置项目设置
在settings.py文件中配置项目的设置。以下是一些常用的设置项:
-
ROBOTSTXT_OBEY:是否遵守目标网站的robots.txt文件。 -
DOWNLOAD_DELAY:下载延迟,用于控制请求间隔。 -
ITEM_PIPELINES:定义数据存储管道。 -
DOWNLOADER_MIDDLEWARES:定义下载中间件。
以下是一个示例代码:
# 是否遵守目标网站的robots.txt文件
ROBOTSTXT_OBEY = True# 下载延迟
DOWNLOAD_DELAY = 1# 数据存储管道
ITEM_PIPELINES = {'myproject.pipelines.MyPipeline': 300,
}# 下载中间件
DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.MyMiddleware': 543,
}
6. 运行爬虫
运行爬虫的命令如下:
scrapy crawl myspider
执行上述命令后,Scrapy会根据定义的爬虫脚本开始爬取数据,并将数据存储到指定的位置。
(三)数据提取与存储
1. 数据提取
Scrapy支持多种数据提取方式,包括XPath、CSS选择器等。以下是一些常用的提取方法:
-
XPath:通过XPath表达式提取数据。
-
CSS选择器:通过CSS选择器提取数据。
以下是一个示例代码,展示如何使用XPath和CSS选择器提取数据:
import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.css('p::text').extract()yield item
2. 数据存储
Scrapy支持多种数据存储方式,包括文件存储、数据库存储等。以下是一些常用的数据存储方式:
-
文件存储:将数据存储到本地文件中,例如JSON文件、CSV文件等。
-
数据库存储:将数据存储到数据库中,例如MySQL、MongoDB等。
以下是一个示例代码,展示如何将数据存储到本地JSON文件中:
import scrapy
from myproject.items import MyprojectItemclass MySpider(scrapy.Spider):name = 'myspider'allowed_domains = ['example.com']start_urls = ['https://www.example.com']def parse(self, response):item = MyprojectItem()item['title'] = response.xpath('//h1/text()').extract()item['link'] = response.urlitem['content'] = response.css('p::text').extract()yield item
在settings.py文件中配置数据存储管道:
# 数据存储管道
ITEM_PIPELINES = {'scrapy.pipelines.JsonItemPipeline': 300,
}
运行爬虫后,数据将被存储到本地JSON文件中。
六、案例分析
(一)案例背景
假设我们需要爬取一个新闻网站的新闻标题、链接和内容。该网站的结构如下:
-
新闻列表页面:包含新闻标题、链接等信息。
-
新闻详情页面:包含新闻内容等详细信息。
(二)爬虫设计
根据上述需求,我们可以设计一个爬虫项目,其主要步骤如下:
-
发送请求:向新闻列表页面发送请求,获取新闻列表页面的HTML文档。
-
解析新闻列表页面:解析新闻列表页面的HTML文档,提取新闻标题、链接等信息。
-
发送请求:向新闻详情页面发送请求,获取新闻详情页面的HTML文档。
-
解析新闻详情页面:解析新闻详情页面的HTML文档,提取新闻内容等详细信息。
-
存储数据:将提取的数据存储到本地文件或数据库中。
(三)代码实现
以下是基于Scrapy框架的爬虫代码实现:
1. 定义爬取的数据结构
在items.py文件中定义爬取的数据结构:
import scrapyclass NewsItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
2. 编写爬虫脚本
在spiders/目录下创建一个爬虫脚本,例如news_spider.py:
import scrapy
from myproject.items import NewsItemclass NewsSpider(scrapy.Spider):name = 'news'allowed_domains = ['example.com']start_urls = ['https://www.example.com/news']def parse(self, response):# 解析新闻列表页面for news in response.css('div.news-item'):item = NewsItem()item['title'] = news.css('h2.title::text').extract_first()item['link'] = news.css('a::attr(href)').extract_first()yield scrapy.Request(url=item['link'], callback=self.parse_detail, meta={'item': item})def parse_detail(self, response):# 解析新闻详情页面item = response.meta['item']item['content'] = response.css('div.content::text').extract_first()yield item
3. 配置项目设置
在settings.py文件中配置项目的设置:
# 是否遵守目标网站的robots.txt文件
ROBOTSTXT_OBEY = True# 下载延迟
DOWNLOAD_DELAY = 1# 数据存储管道
ITEM_PIPELINES = {'scrapy.pipelines.JsonItemPipeline': 300,
}
4. 运行爬虫
运行爬虫的命令如下:
scrapy crawl news
执行上述命令后,Scrapy会根据定义的爬虫脚本开始爬取数据,并将数据存储到本地JSON文件中。
(四)运行结果
运行爬虫后,数据将被存储到本地JSON文件中,文件内容如下:
[{"title": "新闻标题1","link": "https://www.example.com/news/1","content": "新闻内容1"},{"title": "新闻标题2","link": "https://www.example.com/news/2","content": "新闻内容2"}
]
七、总结
本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库和Scrapy框架。通过对这些工具的使用方法、项目结构、数据提取与存储等方面的深入探讨,结合具体实例,展示了如何高效地构建网络爬虫项目。网络爬虫技术在数据分析、机器学习、商业智能等领域具有广泛的应用前景。然而,网络爬虫的使用也需要注意遵守法律法规和目标网站的使用条款,避免对目标网站造成不必要的负担。未来,随着人工智能和机器学习技术的发展,网络爬虫技术将更加智能化和高效化,为数据驱动的决策提供更有力的支持。
参考文献
[1] 姜南. Python网络爬虫开发实战[M]. 北京:电子工业出版社,2018.
[2] 张俊林. Python网络爬虫与数据挖掘[M]. 北京:机械工业出版社,2017.
[3] 王晓华. Python网络爬虫技术与应用[M]. 北京:清华大学出版社,2019.
[4] Scrapy官方文档. Scrapy 2.12 documentation — Scrapy 2.12.0 documentation.
相关文章:
Python的那些事第十六篇:Python的网络爬虫技术
基于Python的网络爬虫技术研究与应用 摘要 随着互联网的飞速发展,网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术,包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、…...
【AIGC】在VSCode中集成 DeepSeek(OPEN AI同理)
在 Visual Studio Code (VSCode) 中集成 AI 编程能力,可以通过安装和配置特定插件来实现。以下是如何通过 Continue 和 Cline 插件集成 DeepSeek: 一、集成 DeepSeek 获取 DeepSeek API 密钥:访问 DeepSeek 官方网站,注册并获取 …...
如何下载CentOS镜像文件
文章目录 如何下载CentOS镜像文件 如何下载CentOS镜像文件 直接前往阿里云官网下载即可。 阿里云官网地址:https://www.aliyun.com 进入官网后,鼠标停留在文档与社区位置,找到镜像站,点击进入即可。进入后,我们可以…...
大模型chagpt原理(持续更新)
20250210更新: 根据李宏毅课程可知,大模型chatgpt基本原理分为三步(每一步都是在做文字接龙,但训练资料不同) 一、依赖大量网上文章、维基百科等资料训练 对资料进行去重,劣质优质划分,过滤等…...
开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革
2月18号,Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析,集成Deepseek R1大模型,通过AI技术的深度融合,致力于打造"会思考的BI系统",让数据价值触手可及,助力企业实现从数据洞察到决策执…...
嵌入式C语言:大小端详解
目录 一、大小端的概念 1.1. 大端序(Big-endian) 1.2. 小端序(Little-endian) 二、大小端与硬件体系的关系 2.1. 大小端与处理器架构 2.2. 大小端与网络协议 2.3. 大小端对硬件设计的影响 三、判断系统的大小端方式 3.1.…...
Vue事件处理 - 按键修饰符
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue事件处理 - 按键修饰符 目录 按键修饰符 常见修饰符 绑定按键事件 绑定事件 优化回车修饰符 多个按键 直接绑定数字 总结 按键修饰符 常见修饰符 .esc .up .down .left .right . space .ctrl .shift .delete 绑定…...
数据中心网络监控
数据中心是全球协作的特定设备网络,用来在internet网络基础设施上传递、加速、展示、计算、存储数据信息。 对于任何利用IT基础设施的企业来说,数据中心都是运营的核心,它本质上为整个业务网络托管业务应用程序和存储空间。数据中心可以是任…...
基于Kotlin中Flow扩展重试方法
最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。 目前的场景是,接口在请求的时候需要一个accessToken值,因为此值会过期或者不存在,需要刷新,因此最终方案是在使用Flow请求的时候先获取accessToken值然后再进行接口请求…...
oracle如何查询历史最大进程数?
oracle如何查询历史最大进程数? SQL> desc dba_hist_resource_limitName Null? Type---------------------------------------------------- -------- ------------------------------------SNAP_ID …...
利用HTML和css技术编写学校官网页面
目录 一,图例展示 二,代码说明 1,html部分: 【第一张图片】 【第二张图片】 【第三张图片】 2,css部分: 【第一张图片】 【第二张图片】 【第三张图片】 三,程序代码 一,…...
PostgreSQL错误: 编码“UTF8“的字符0x0xe9 0x94 0x99在编码“WIN1252“没有相对应值
错误介绍 今天遇到一个错误,记录一下 2025-02-10 17:04:35.264 HKT [28816] 错误: 编码"WIN1252"的字符0x0x81在编码"UTF8"没有相对应值 2025-02-10 17:04:35.264 HKT [28816] 错误: 编码"UTF8"的字符0x0xe9 0x94 0x99在编码&quo…...
Flink KafkaConsumer offset是如何提交的
一、fllink 内部配置 client.id.prefix,指定用于 Kafka Consumer 的客户端 ID 前缀partition.discovery.interval.ms,定义 Kafka Source 检查新分区的时间间隔。 请参阅下面的动态分区检查一节register.consumer.metrics 指定是否在 Flink 中注册 Kafka…...
拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动
拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动 1. 前情: 1TB的硬盘,分了120G作ubuntu22.04。/boot: 300MB, / : 40GB, /home: 75G, 其余作swap area。 2. 一开始按这个教程:对我无效 https://blog.csdn.net/Eric_xkk/article/details/1…...
Web3 的虚实融合之路:从虚拟交互到元宇宙构建
在这个数字技术日新月异的时代,我们正站在 Web3 的门槛上,见证着互联网的又一次革命。Web3 不仅仅是技术的迭代,它代表了一种全新的交互方式和价值创造模式。本文将探讨 Web3 如何推动虚拟交互的发展,并最终实现元宇宙的构建&…...
QT修仙笔记 事件大圆满 闹钟大成
学习笔记 牛客刷题 闹钟 时钟显示 通过 QTimer 每秒更新一次 QLCDNumber 显示的当前时间,格式为 hh:mm:ss,实现实时时钟显示。 闹钟设置 使用 QDateTimeEdit 让用户设置闹钟时间,可通过日历选择日期,设置范围为当前时间到未来 …...
变相提高大模型上下文长度-RAG文档压缩-1.常识
前言 之前遇到一个问题,公司大模型的长度不长,而且业务需要RAG返回不少的相关内容。通常RAG都是取top-10/15,文档由于长度限制不能太多,加上embedding效果不佳,返回的文档不多也不能保证都相关。 我们考虑到返回的文…...
人工智能浪潮下脑力劳动的变革与重塑:挑战、机遇与应对策略
一、引言 1.1 研究背景与意义 近年来,人工智能技术发展迅猛,已成为全球科技领域的焦点。从图像识别、语音识别到自然语言处理,从智能家居、智能交通到智能医疗,人工智能技术的应用几乎涵盖了我们生活的方方面面,给人…...
2025 年 2 月 TIOBE 指数
2025 年 2 月 TIOBE 指数 二月头条:快,更快,最快! 现在,世界需要每秒处理越来越多的数字,而硬件的发展速度却不够快,程序的速度变得越来越重要。话虽如此,快速编程语言在 TIOBE 指数中取得进展也就不足为奇了。编程语言 C++ 最近攀升至第 2 位,Go 已稳居前 10 名,Ru…...
防火墙是什么?详解网络安全的关键守护者
当今信息化时代,企业和个人在享受数字生活带来的便利时,也不可避免地面对各种潜在的风险。防火墙作为网络安全体系中的核心组件,就像一道牢不可破的防线,保护着我们的数据和隐私不受外界威胁的侵害。那么防火墙是什么?…...
【Elasticsearch】cumulative_cardinality
1.定义与用途 cumulative_cardinality是一种父级管道聚合(Parent Pipeline Aggregation),用于在父级直方图(histogram)或日期直方图(date_histogram)聚合中计算累计基数。它主要用于统计在某个…...
【LeetCode 刷题】贪心算法(2)-进阶
此博客为《代码随想录》贪心算法章节的学习笔记,主要内容为贪心算法进阶的相关题目解析。 文章目录 135. 分发糖果406. 根据身高重建队列134. 加油站968. 监控二叉树 135. 分发糖果 题目链接 class Solution:def candy(self, ratings: List[int]) -> int:n l…...
字体文件子集化(Font Subsetting)及实现代码
字体文件子集化(Font Subsetting)是指从一个完整的字体文件中提取出仅包含特定字符集的子集,以减小字体文件的大小。这在网页设计、移动应用开发和嵌入式系统中非常有用,可以显著减少加载时间和资源占用。 1. 字体子集化的基本原…...
第三篇:半导体“红蓝药丸“——IGBT/SiC器件如何重塑电驱系统
副标题:当黑客帝国遇见800V高压架构,第三代半导体开启能源革命 ▶ 开篇:红蓝药丸的终极抉择 黑客帝国隐喻 - 红色药丸(IGBT) :传统硅基器件构建的"真实世界"——成熟稳定但存在性能天花板…...
3.矩阵分解技术在推荐系统中的应用
接下来我们将深入探讨矩阵分解技术在推荐系统中的应用。矩阵分解是一种强大的技术,可以有效地处理数据稀疏性问题,并提高推荐系统的性能。在这一课中,我们将介绍以下内容: 矩阵分解的基本概念奇异值分解(SVDÿ…...
VTK编程指南<十六>:VTK表面重建之Delaunay三角剖分
1、无边界限制 三角剖分是一种应用非常广泛的重建技术。三角剖分将一些散乱的点云数据划分为一系列的三角形网格。最常用的三角剖分技术是Delaunay三角剖分。Delaunay三角剖分具有许多优良的性质,即最大化最小角特性,即所有可能的三角形剖分中࿰…...
2.Excel:滨海市重点中学的物理统考考试情况❗(15)
目录 NO12 1.数据透视表 2. 3.sum函数 4.sumifs客观/主观平均分 5.sumifs得分率 6.数字格式修改 NO3/4/5 sumifs某一组数据相加,某一范围,某一范围的具体点向下拖拉,锁定列;向左右,锁定行F4&#x…...
leetcode day17 二分查找 34+367 移除元素27
34 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为…...
ASP.NET Core SignalR的协议协商
SignalR支持多种服务器推送方式:Websocket、Server-Sent Events、长轮询。默认按顺序尝试。F12查看协商过程。websocket和HTTP是不同的协议,为什么能用同一个端口。在【开发人员工具】的【网络】页签中看WebSocket通信过程。 协议协商问题 集群中协议协…...
Hdoop之MapReduce的原理
简单版本 AppMaster: 整个Job任务的核心协调工具 MapTask: 主要用于Map任务的执行 ReduceTask: 主要用于Reduce任务的执行 一个任务提交Job --> AppMaster(项目经理)--> 根据切片的数量统计出需要多少个MapTask任务 --> 向ResourceManager(Yarn平台的老大)索要资源 --…...
