零基础入门 Python 爬虫:手把手教你爬取苏宁商品评论(好评 + 差评)

作为编程新手,你是否也曾好奇:那些电商平台上成千上万的商品评论,能不能用代码批量抓取下来?是否想过通过分析这些评论,了解一款产品的优缺点?今天这篇文章,我将以 “爬取苏宁手机评论” 为例,从 0 开始讲解 Python 爬虫的实现过程,哪怕你是刚接触编程的小白,跟着步骤走也能轻松上手。

本文全程使用通俗易懂的语言,避开复杂的专业术语,结合完整可运行的代码,详细拆解每一个环节,最终实现 “自动爬取苏宁商品好评 + 差评,并保存到本地文件” 的完整功能。全文约 4000 字,包含环境搭建、代码解析、问题修复、功能扩展等核心内容,耐心看完,你将掌握 Selenium 爬虫的核心逻辑。

一、爬虫入门:先搞懂几个核心概念

在写代码之前,我们先花几分钟搞懂几个基础概念,避免后续看到代码一脸懵。

1.1 什么是爬虫?

简单来说,爬虫就是模拟人的操作,自动访问网页、提取指定信息的程序。比如我们手动打开苏宁评论页,一页一页翻、复制评论内容,这个过程重复且枯燥,而爬虫可以替我们完成这些机械操作 —— 自动打开浏览器、加载页面、提取评论、翻页、保存内容,全程无需人工干预。

1.2 为什么选 Selenium?

爬取网页的工具很多(比如 Requests+BeautifulSoup),但苏宁的评论页面采用了动态加载技术,普通的请求工具无法直接获取到评论内容。而Selenium 是一款自动化测试工具,可以模拟真实的浏览器操作(比如点击、翻页、等待页面加载),完美解决动态页面的爬取问题,对新手也非常友好。

1.3 核心名词解释(小白友好版)

  • 驱动(Driver):可以理解为 “代码和浏览器之间的桥梁”,比如我们用 Selenium 控制 Edge 浏览器,就需要 Edge 驱动来传递指令;
  • 定位元素:爬虫要提取 “评论内容”,首先得找到评论在网页中的位置,这个过程就是 “定位元素”,常用的方式有按类名、按 XPath、按 ID 等;
  • 等待机制:网页加载需要时间,如果代码执行速度比页面加载快,就会出现 “找不到元素” 的错误,所以需要设置 “等待”,等页面加载完成后再执行后续操作;
  • 翻页逻辑:判断页面是否有 “下一页” 按钮,有就点击,没有就停止,这是爬取多页内容的核心逻辑。

二、环境搭建:准备工作一步都不能少

工欲善其事,必先利其器。在写代码之前,我们需要先搭建好运行环境,这是新手最容易踩坑的环节,我会把每一步都写得清清楚楚。

2.1 安装 Python(已安装可跳过)

首先确保你的电脑安装了 Python,推荐安装 3.8 及以上版本:

  1. 打开 Python 官网(https://www.python.org/downloads/),下载对应系统的安装包;
  2. 安装时勾选 “Add Python to PATH”(关键!否则后续无法在命令行调用 Python);
  3. 验证:打开电脑的 “命令提示符(CMD)”,输入python --version,如果显示 Python 版本号,说明安装成功。

2.2 安装 Selenium 库

Selenium 是第三方库,需要手动安装:

  1. 打开 CMD,输入命令:pip install selenium
  2. 等待安装完成,输入pip show selenium,如果显示 Selenium 的版本信息,说明安装成功。

2.3 关于浏览器驱动(新手不用手动下载)

很多教程会让新手手动下载浏览器驱动,但新版 Selenium 已经实现了 “驱动自动管理”—— 运行代码时,会自动检测你的浏览器版本,并下载匹配的驱动,无需手动操作,大大降低了新手的门槛。

三、核心代码解析:从基础版到完整版

我们先从最基础的代码开始,逐步拆解每一个功能,再修复其中的问题,最终得到一个健壮的完整版代码。

3.1 基础版代码(小白入门级)

先看一段最基础的爬取苏宁好评的代码,我们逐行解析:

python

运行

# 导入需要的库 from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By import time # 1. 配置Edge浏览器 # 定义Edge浏览器的安装路径(适配大多数Windows系统) __browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" # 创建配置对象 chrome_options = Options() # 指定浏览器路径 chrome_options.binary_location = __browser_url # 初始化浏览器驱动 driver = webdriver.Edge(options=chrome_options) # 2. 访问苏宁好评页面 review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCm' driver.get(review_url) # 3. 打开本地文件,用于保存评论 yzpj_file = open('优质评价.txt', 'w') # 4. 定义函数:提取当前页面的评论 def get_py_content(file): # 按类名定位评论元素(body-content是评论内容的类名) pj_elements_content = driver.find_elements(by=By.CLASS_NAME, value='body-content') # 遍历所有评论元素,提取文本并写入文件 for i in range(len(pj_elements_content)): file.write(pj_elements_content[i].text + '\n') # 5. 调用函数,获取第一页评论 get_py_content(yzpj_file) # 6. 翻页逻辑:循环点击“下一页” # 按XPath定位下一页按钮 next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') # 如果找到下一页按钮,就点击 while next_elements != []: next_element = next_elements[0] time.sleep(1) # 等待1秒,让页面加载 next_element.click() # 点击下一页 get_py_content(yzpj_file) # 提取新页面的评论 next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') # 7. 关闭文件 yzpj_file.close() 

3.2 基础版代码逐行解析(小白必看)

(1)库导入部分

python

运行

from selenium import webdriver # 核心库,用于控制浏览器 from selenium.webdriver.edge.options import Options # 用于配置浏览器选项 from selenium.webdriver.common.by import By # 用于定位元素的常量 import time # 用于设置等待时间 

这部分是 “导入工具”,就像做饭前先把锅碗瓢盆准备好一样,后续代码需要用到这些库的功能。

(2)浏览器配置部分

python

运行

__browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" chrome_options = Options() chrome_options.binary_location = __browser_url driver = webdriver.Edge(options=chrome_options) 
  • __browser_url:指定 Edge 浏览器的安装路径,不同电脑可能路径不同(比如有的是C:\Program Files\Microsoft\Edge\Application\msedge.exe);
  • chrome_options:创建浏览器配置对象,相当于给浏览器设置 “参数”;
  • driver = webdriver.Edge(...):创建浏览器驱动对象,后续所有操作(打开网页、点击按钮)都通过这个对象完成。
(3)访问网页 + 保存文件

python

运行

review_url = '目标URL' driver.get(review_url) # 打开指定网页 yzpj_file = open('优质评价.txt', 'w') # 打开本地文件,'w'表示“写入模式” 
  • driver.get(url):模拟手动在浏览器地址栏输入 URL 并回车;
  • open('优质评价.txt', 'w'):在代码同级目录创建 / 打开 “优质评价.txt” 文件,准备写入评论内容。
(4)提取评论的函数

python

运行

def get_py_content(file): pj_elements_content = driver.find_elements(by=By.CLASS_NAME, value='body-content') for i in range(len(pj_elements_content)): file.write(pj_elements_content[i].text + '\n') 
  • driver.find_elements(By.CLASS_NAME, 'body-content'):按 “类名” 查找网页中所有评论元素(打开苏宁评论页,按 F12 可看到评论内容的 class 是 body-content);
  • element.text:提取元素的文本内容(也就是评论本身);
  • file.write(...):把提取的评论写入文件,\n表示换行。
(5)翻页逻辑

python

运行

next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') while next_elements != []: next_element = next_elements[0] time.sleep(1) next_element.click() get_py_content(yzpj_file) next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') 
  • find_elements_by_xpath(...):按 XPath 定位 “下一页” 按钮;
  • while next_elements != []:如果找到下一页按钮,就进入循环;
  • next_element.click():模拟手动点击 “下一页” 按钮;
  • 循环执行 “点击下一页→提取评论”,直到找不到下一页按钮为止。

3.3 基础版代码的问题(新手必踩的坑)

运行上面的基础版代码,大概率会报错或出现各种问题,主要原因有:

问题 1:find_elements_by_xpath已被废弃

新版 Selenium 中,find_elements_by_xpath()find_elements_by_class_name()等写法已经被移除,必须改用统一的写法:find_elements(By.XPATH, '路径'),否则会直接报错。

问题 2:缺少等待机制,页面加载不完整

基础版只用了time.sleep(1)(固定等待 1 秒),但网页加载速度受网络影响,1 秒可能不够 —— 代码执行到 “查找评论元素” 时,页面还没加载完,就会出现 “找不到元素” 的错误。

问题 3:文件操作不规范,容易丢失数据

直接用open(...)打开文件,如果代码中途报错,文件会来不及关闭,导致已写入的内容丢失;且没有指定编码,爬取中文评论时会出现乱码。

问题 4:浏览器驱动未关闭,残留进程

代码执行完后,没有关闭浏览器驱动,会导致电脑后台残留多个 Edge 进程,占用系统资源。

问题 5:浏览器路径不兼容

不同电脑的 Edge 安装路径可能不同(比如 32 位系统和 64 位系统),固定路径会导致部分电脑运行失败。

3.4 完整版代码(修复所有问题,小白可直接用)

针对上面的问题,我们对代码进行全面优化,得到最终的完整版(以爬取好评为例):

python

运行

''' 爬取苏宁商品评论(好评)- 完整版 适用人群:Python零基础小白 功能:自动打开浏览器、爬取多页好评、保存到本地文件、自动关闭浏览器 ''' from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import os # ===================== 第一步:初始化浏览器驱动(兼容不同系统) ===================== def init_edge_driver(): """ 初始化Edge浏览器驱动 功能:自动检测Edge路径、添加防检测配置、设置隐式等待 """ # 创建浏览器配置对象 chrome_options = Options() # 1. 自动检测Edge浏览器路径(兼容32/64位系统) edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break # 2. 添加防检测配置(避免被网站识别为爬虫) chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 3. 创建驱动对象 + 设置隐式等待(全局等待10秒) driver = webdriver.Edge(options=chrome_options) driver.implicitly_wait(10) # 所有元素查找操作最多等待10秒 return driver # ===================== 第二步:核心爬取逻辑 ===================== if __name__ == "__main__": # 1. 初始化浏览器 driver = init_edge_driver() print("浏览器已启动...") # 2. 目标URL(苏宁商品好评页) review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCm' # 3. 打开目标网页 driver.get(review_url) print(f"已打开网页:{review_url}") # 4. 打开本地文件(用with语句自动关闭,避免数据丢失;指定UTF-8编码防中文乱码) with open('优质评价.txt', 'w', encoding='utf-8') as yzpj_file: # 定义提取评论的函数 def get_comment_content(file): """ 提取当前页面的评论内容 参数:file - 要写入的文件对象 """ # 显式等待:直到评论元素加载完成(最多等10秒) WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 查找所有评论元素 comment_elements = driver.find_elements(By.CLASS_NAME, 'body-content') # 遍历并写入文件 for element in comment_elements: content = element.text.strip() # 去除首尾空格 if content: # 过滤空评论 file.write(content + '\n\n') # 空行分隔,提升可读性 print(f"已抓取评论:{content[:50]}...") # 打印预览(只显示前50字) # ===== 第一步:提取第一页评论 ===== print("开始抓取第一页评论...") get_comment_content(yzpj_file) # ===== 第二步:循环翻页提取 ===== page_num = 2 while True: try: # 显式等待:直到下一页按钮可点击(最多等5秒) next_button = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//*[@class="next rv-maidian "]')) ) # 点击下一页 print(f"正在跳转到第{page_num}页...") next_button.click() time.sleep(2) # 等待页面完全加载(动态页面必备) # 提取当前页评论 get_comment_content(yzpj_file) page_num += 1 except: # 捕获异常 = 没有下一页了,退出循环 print("已爬取完所有页面!") break # ===================== 第三步:清理资源 ===================== print("开始关闭浏览器...") driver.quit() # 关闭浏览器+驱动(区别于driver.close(),后者只关标签页) print("爬取完成!评论已保存到「优质评价.txt」文件中。") 

3.5 完整版代码核心优化点解析

优化 1:自动检测浏览器路径

python

运行

edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break 

遍历两个常见的 Edge 安装路径,自动选择存在的路径,兼容不同系统。

优化 2:智能等待机制(替代固定 sleep)

python

运行

# 显式等待:等评论元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 隐式等待:全局设置,所有元素查找最多等10秒 driver.implicitly_wait(10) 
  • 显式等待:针对特定元素设置等待,元素加载完成后立即执行,比固定 sleep 更高效;
  • 隐式等待:全局生效,避免重复写等待代码。
优化 3:规范的文件操作

python

运行

with open('优质评价.txt', 'w', encoding='utf-8') as yzpj_file: # 写入操作... 
  • with语句:无论代码是否报错,都会自动关闭文件,避免数据丢失;
  • encoding='utf-8':指定编码格式,彻底解决中文乱码问题。
优化 4:修复废弃的 API

python

运行

# 错误写法(已废弃) driver.find_elements_by_xpath('xxx') # 正确写法 driver.find_elements(By.XPATH, 'xxx') 

改用新版 Selenium 的标准写法,避免报错。

优化 5:资源清理 + 防检测

python

运行

# 关闭浏览器+驱动,彻底清理进程 driver.quit() # 添加防检测配置,降低被封IP的风险 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) 

四、功能扩展:爬取苏宁商品差评

掌握了好评的爬取方法,差评的爬取只需要修改两个地方:目标 URL + 输出文件名,核心逻辑完全一致。

4.1 爬取差评的完整代码

python

运行

''' 爬取苏宁商品评论(差评)- 完整版 适用人群:Python零基础小白 功能:自动打开浏览器、爬取多页差评、保存到本地文件、自动关闭浏览器 ''' from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import os # ===================== 第一步:初始化浏览器驱动(兼容不同系统) ===================== def init_edge_driver(): """ 初始化Edge浏览器驱动 功能:自动检测Edge路径、添加防检测配置、设置隐式等待 """ chrome_options = Options() # 自动检测Edge浏览器路径(兼容32/64位系统) edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break # 添加防检测配置 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 创建驱动对象 + 设置隐式等待 driver = webdriver.Edge(options=chrome_options) driver.implicitly_wait(10) return driver # ===================== 第二步:核心爬取逻辑 ===================== if __name__ == "__main__": # 1. 初始化浏览器 driver = init_edge_driver() print("浏览器已启动...") # 2. 目标URL(替换为差评URL) review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-bad.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166' # 3. 打开目标网页 driver.get(review_url) print(f"已打开网页:{review_url}") # 4. 打开本地文件(文件名改为“差评.txt”) with open('差评.txt', 'w', encoding='utf-8') as bad_comment_file: # 定义提取评论的函数 def get_comment_content(file): """提取当前页面的差评内容""" # 显式等待:直到评论元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 查找所有差评元素 comment_elements = driver.find_elements(By.CLASS_NAME, 'body-content') # 遍历并写入文件 for element in comment_elements: content = element.text.strip() if content: file.write(content + '\n\n') print(f"已抓取差评:{content[:50]}...") # ===== 第一步:提取第一页差评 ===== print("开始抓取第一页差评...") get_comment_content(bad_comment_file) # ===== 第二步:循环翻页提取 ===== page_num = 2 while True: try: # 显式等待:直到下一页按钮可点击 next_button = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//*[@class="next rv-maidian "]')) ) # 点击下一页 print(f"正在跳转到第{page_num}页...") next_button.click() time.sleep(2) # 提取当前页差评 get_comment_content(bad_comment_file) page_num += 1 except: print("已爬取完所有差评页面!") break # ===================== 第三步:清理资源 ===================== print("开始关闭浏览器...") driver.quit() print("爬取完成!差评已保存到「差评.txt」文件中。") 

4.2 差评爬取的核心改动

对比好评代码,差评代码仅改动了两处:

  1. 目标 URL:替换为你提供的苏宁差评 URL;
  2. 输出文件:将优质评价.txt改为差评.txt,同时变量名从yzpj_file改为bad_comment_file,让代码语义更清晰;
  3. 提示文字:将 “评论” 改为 “差评”,方便运行时识别进度。

五、运行代码的详细步骤(小白手把手版)

步骤 1:新建 Python 文件

  1. 在电脑桌面(或任意文件夹)右键 → 新建 → 文本文档;
  2. 将文本文档重命名为苏宁评论爬虫.py(注意:后缀必须是.py,如果看不到后缀,需要在 “文件夹选项” 中勾选 “显示文件扩展名”)。

步骤 2:粘贴代码

双击打开苏宁评论爬虫.py文件,将上面的好评 / 差评代码完整粘贴进去,保存并关闭。

步骤 3:运行代码

  1. 右键点击苏宁评论爬虫.py → 选择 “用 Python 打开”(或 “打开方式”→ 选择 Python);
  2. 此时会弹出一个命令行窗口,同时自动打开 Edge 浏览器,开始爬取评论;
  3. 等待运行完成(命令行窗口显示 “爬取完成”),关闭窗口即可。

步骤 4:查看结果

回到代码所在文件夹,会看到生成的好评.txt/差评.txt文件,双击打开即可查看爬取的评论内容。

六、常见问题解决(小白避坑指南)

问题 1:运行代码时提示 “找不到 Python”

  • 原因:安装 Python 时未勾选 “Add Python to PATH”;
  • 解决:重新安装 Python,务必勾选该选项;或手动配置环境变量(新手建议重新安装)。

问题 2:爬取的文件为空 / 只有部分评论

  • 原因:页面加载不完整,或元素定位失败;
  • 解决:
    1. 增加time.sleep(2)中的数字(比如改为 3);
    2. 检查网页中评论元素的 class 是否为body-content(按 F12 查看);
    3. 确保网络通畅,避免页面加载超时。

问题 3:中文乱码

  • 原因:文件写入时未指定编码;
  • 解决:确保open(...)中包含encoding='utf-8'

问题 4:浏览器打开后立即关闭

  • 原因:代码执行完成后调用了driver.quit(),属于正常现象;
  • 解决:如果想保留浏览器,可注释掉driver.quit()(但不推荐,会残留进程)。

问题 5:提示 “找不到下一页按钮”

  • 原因:当前页面已经是最后一页,或下一页按钮的 XPath 路径变化;
  • 解决:这是正常提示,说明爬取已完成;如果确认有下一页但未爬取,需重新检查下一页按钮的 XPath。

七、进阶思考:爬虫可以做什么?

爬取到评论后,我们还可以做更多事情:

  1. 评论分词 / 词云分析:用 jieba 库对评论分词,生成词云,直观看到高频词汇(比如 “电池耐用”“拍照清晰”“卡顿” 等);
  2. 情感分析:用第三方库(比如 snownlp)分析评论的情感倾向,统计好评 / 差评的占比;
  3. 数据可视化:用 matplotlib 绘制好评 / 差评数量对比图,或高频问题的柱状图;
  4. 批量爬取多个商品:修改代码,循环爬取多个商品的评论,做竞品分析。

八、爬虫的注意事项(必看)

  1. 遵守网站规则:爬取前查看网站的robots.txt文件(比如https://www.suning.com/robots.txt),确认允许爬取的内容;
  2. 控制爬取速度:不要频繁请求,避免给网站服务器造成压力(本文代码中设置了time.sleep(2),就是为了控制速度);
  3. 仅用于学习:本文代码仅作为学习用途,请勿用于商业用途或恶意爬取;
  4. 注意 IP 封禁:如果频繁爬取,可能会被网站封禁 IP,可适当增加等待时间,或使用代理 IP(新手暂无需掌握)。

总结

本文从零基础视角出发,完整讲解了 “用 Python+Selenium 爬取苏宁商品评论” 的全过程,核心要点如下:

  1. 新手爬取动态页面优先选择 Selenium,其模拟浏览器操作的特性能解决大部分动态加载问题;
  2. 基础版代码的核心问题是 “废弃 API + 缺少等待 + 文件操作不规范”,优化后可大幅提升稳定性;
  3. 爬取好评 / 差评的核心逻辑一致,仅需修改目标 URL 和输出文件名;
  4. 爬虫开发需注意 “等待机制” 和 “资源清理”,这是新手最容易忽略的关键点。

希望这篇文章能帮助你入门 Python 爬虫,从 “看懂代码” 到 “写出代码”,再到 “优化代码”。编程的核心是 “解决问题”,遇到报错不要怕,逐一分析、逐一修复,你会发现爬虫并没有想象中那么难。

Read more

在Windows11系统上配置interl Realsense D435i深度相机+Python

在Windows11系统上配置interl Realsense D435i深度相机+Python

一、产品介绍 Intel RealSense D435i是英特尔公司推出的一款消费级深度相机,它的主要构成如下图所示。 主要包含一个RGB相机、两个红外相机以及一个红外发射器,此外还有一个IMU单元(这也就是D435i和D435的区别,i就表示imu)。简单来说它的深度成像原理是主动立体红外成像,不是传统意义上理解的双目RGB相机成像,这点需要注意一下。 有了深度图(3D点云)和对应的RGB影像,因此也就很容易获得RGB-D点云了。因此从输出的角度而言,D435i可以看做是一个RGB-D传感器相机。后续可以搭配ORB-SLAM中RGB-D的模式进行使用。当然,也可以只用单目RGB影像,以单目SLAM模式运行,或者单目结合IMU,以Mono-Initial模式运行。唯一不能运行的是双目RGB模式(因为两个红外相机是单通道的)。当然我们可以获取双目的红外影像,以此作为输入,进行双目SLAM,结果也是类似的。因此可以看出,D435i是一个比较“全能”的传感器,从单目、单目+IMU、双目、双目+IMU、RGB-D都可以使用。 对于它的一些技术上的参数,这里也简单列举一下: * 深度技

By Ne0inhk
【C++ 函数模板】—— 模板参数推导、实例化策略与编译优化

【C++ 函数模板】—— 模板参数推导、实例化策略与编译优化

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创📩!欢迎评论区留言交流🌟 个人主页 👉 ZyyOvO 本文专栏➡️C++ 进阶之路 各位于晏,亦菲们请看 * 引言 * 函数模板的概念 * 函数模板的匹配原则 * 函数模板的底层原理 * 模板的编译阶段 * 模板实例化 * 编译器与链接器的协作 * 编译器的工作流程 * 前端编译阶段 * 模板实例化阶段 * 后端编译阶段 * 函数模板总结 * 写在最后 引言 点击快速复习 👉:【C++ 函数重载】—— 现代编译技术下的多态表达与性能优化 上篇文章我们讲到C++的函数重载,包括函数重载的条件,原理以及一些易错事项,那么本文我们为大家介绍C++中泛型编程的主要方式——模板。 在 C++ 中,模板(Template)是一种强大的编程特性,它允许程序员编写与类型无关的代码,实现代码的复用和泛型编程。 如同模具一样,

By Ne0inhk
基础算法:滑动窗口_python版本

基础算法:滑动窗口_python版本

能使用滑动窗口的题,基本都需要数字为正整数,这样才能保证滑入一个数字总和是增加的(单调性) 一、209. 长度最小的子数组 * 思路: 已每个位置为右端点,依次加大左端点,最短不满足 sum(num[left,right]) < target的。 * 代码: classSolution:defminSubArrayLen(self, target:int, nums: List[int])->int: n =len(nums) ans = n +1# 也可以写 inf s = left =0for right, x inenumerate(nums):# 枚举子数组右端点 s += x while s >

By Ne0inhk
纯C++手撸PP-OCRv5文字识别!不依赖OpenCV,从零到跑通全流程

纯C++手撸PP-OCRv5文字识别!不依赖OpenCV,从零到跑通全流程

纯C++手撸PaddleOCR PP-OCRv5文字识别!不依赖OpenCV,从零到跑通全流程 你是不是也遇到过这种情况:想在C++项目里加个OCR功能,结果光装OpenCV就折腾半天?今天教你零OpenCV依赖,用Paddle Inference + stb_image,纯C++实现PP-OCRv5文字识别全流程(检测+识别),代码可直接跑! 一、效果先行 cd /home/michah/桌面/paddle_inference && ./build/ocr_demo build/640.png --text-only cd /home/michah/桌面/paddle_inference && ./build/ocr_demo build/640.png

By Ne0inhk