当前位置: 首页 > news >正文

爬虫技术入门:基本原理、数据抓取与动态页面处理

引言

在当今数据驱动的时代,网络爬虫技术已成为获取和分析互联网数据的重要手段。无论是搜索引擎的网页收录、竞品数据分析,还是学术研究的语料收集,爬虫技术都发挥着关键作用。本文将深入浅出地讲解爬虫的基本原理,分析它能获取的数据类型,并重点探讨如何处理JavaScript动态渲染的页面。


一、爬虫技术概述

1.1 什么是网络爬虫?

网络爬虫(Web Crawler)是一种自动化程序,通过模拟浏览器行为或直接发送HTTP请求,按照预设规则遍历互联网资源并提取目标数据。其核心工作流程可概括为:

  • ​请求​​:向目标服务器发送HTTP请求
  • ​解析​​:提取响应内容中的有效数据
  • ​存储​​:将结构化数据持久化保存
  • ​调度​​:管理待抓取队列和已抓取记录
# 示例:使用Python requests库发送HTTP请求
import requests
response = requests.get("https://example.com")
print(response.text)

1.2 爬虫的核心组件

  • ​下载器​​:负责发送请求并获取响应(如Requests、Scrapy的Downloader)
  • ​解析器​​:从HTML/JSON等格式中提取数据(如BeautifulSoup、XPath、正则表达式)
  • ​调度器​​:管理URL队列和去重策略(广度优先/深度优先)
  • ​存储模块​​:将数据保存到文件或数据库(CSV、MySQL、MongoDB等)

二、爬虫能获取哪些数据?

2.1 静态网页数据

传统HTML页面中的文本、链接、表格等可直接通过解析HTML源码获取:

<!-- 示例:网页中的新闻标题 -->
<h1 class="news-title">今日热点新闻</h1>

使用XPath或CSS选择器提取:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
title = soup.select_one('.news-title').text

2.2 结构化数据接口

现代网站常通过API接口返回JSON/XML数据:

// 示例:某电商平台的商品API响应
{"productId": 123,"name": "智能手机","price": 2999
}

可通过抓包工具(如Chrome DevTools)分析XHR/Fetch请求获取接口地址。

2.3 多媒体资源

  • 图片:<img src="image.jpg">
  • 视频:<video src="video.mp4">
  • 文件:PDF、Word文档等
# 示例:下载图片
with open('image.jpg', 'wb') as f:f.write(requests.get(image_url).content)

2.4 动态渲染内容

通过JavaScript动态生成的数据(需特殊处理,详见第三部分)。


三、JavaScript渲染页面的处理

3.1 动态页面的挑战

传统爬虫无法获取以下内容:

  • 通过Ajax异步加载的数据
  • 用户交互触发的显示内容
  • 单页面应用(SPA)的渲染结果

对比实验:

请求方式获取到的内容
直接请求HTML空商品列表容器 <div id="products"></div>
浏览器实际显示包含20个商品详情的列表

3.2 解决方案一:Headless浏览器

使用无界面浏览器执行完整渲染流程:

# 示例:使用Selenium+ChromeDriver
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://dynamic-site.com")
# 等待内容加载
time.sleep(2)
print(driver.page_source)
driver.quit()

优缺点对比:

方法优点缺点
Headless浏览器100%还原浏览器环境资源消耗大、速度慢
逆向工程API高效快速需分析网络请求

3.3 解决方案二:逆向工程JavaScript

通过分析网络请求寻找数据接口:

  1. 使用浏览器开发者工具(F12)检查Network面板
  2. 查找XHR/Fetch请求中的API地址
  3. 模拟请求参数和Headers
# 示例:模拟Ajax请求
headers = {"User-Agent": "Mozilla/5.0","X-Requested-With": "XMLHttpRequest"
}
params = {"page": 1, "size": 20}
response = requests.get(api_url, headers=headers, params=params)

3.4 混合抓取策略

  1. 优先尝试直接请求API
  2. 对必要页面使用Headless浏览器
  3. 结合缓存机制减少重复渲染

四、爬虫伦理与法律边界

4.1 必须遵守的规则

  • 尊重robots.txt协议
# 示例:禁止爬虫访问的目录
User-agent: *
Disallow: /admin/
Disallow: /private/
  • 设置合理请求频率(建议≥2秒/次)
  • 避免抓取个人隐私数据

4.2 反爬虫技术应对

  • ​User-Agent轮换​​:模拟不同浏览器
  • ​IP代理池​​:防止IP被封禁
  • ​验证码识别​​:OCR或第三方打码平台

结语

网络爬虫技术既是获取数据的利器,也需谨慎使用。随着Web技术的演进(如SPA的普及、反爬机制的增强),爬虫开发者需要不断更新技术手段。建议在项目中优先使用合法API,对于必须抓取的动态页面,合理选择渲染方案,在效率与准确性之间找到平衡点。

​技术栈推荐​​:

  • Python生态:Requests + BeautifulSoup/Scrapy + Selenium
  • 浏览器自动化:Puppeteer(Node.js)、Playwright
  • 云服务:ScrapingBee、Apify

​注意​​:实际部署时请遵守目标网站的robots.txt规定及相关法律法规。本文仅用于技术讨论,禁止用于任何非法爬取行为。


最新技术动态请关注作者:Python×CATIA工业智造​​
版权声明:转载请保留原文链接及作者信息

 

相关文章:

爬虫技术入门:基本原理、数据抓取与动态页面处理

引言 在当今数据驱动的时代&#xff0c;网络爬虫技术已成为获取和分析互联网数据的重要手段。无论是搜索引擎的网页收录、竞品数据分析&#xff0c;还是学术研究的语料收集&#xff0c;爬虫技术都发挥着关键作用。本文将深入浅出地讲解爬虫的基本原理&#xff0c;分析它能获取…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月27日第65弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀6-8个和值&#xff0c;可以做到100-300注左右。 (1)定…...

服务器数据备份,服务器怎么备份数据呢?

企业数据量呈指数级增长&#xff0c;服务器数据备份已成为保障业务连续性、抵御勒索攻击与合规审查的核心技术环节。当前&#xff0c;服务器数据备份方案需兼顾数据完整性、恢复时效性、存储经济性三大核心诉求&#xff0c;其实现路径可根据技术架构、数据规模及容灾等级划分为…...

语音识别质量的跟踪

背景 这个项目是用来生成结构化的电子病历的。数据的来源是医生的录音。中间有一大堆的处理&#xff0c;语音识别&#xff0c;关键字匹配&#xff0c;结构化处理&#xff0c;病历编辑......。最多的时候给上百家医院服务。 语音识别质量的跟踪 一、0225医院的训练后的情况分…...

【数据挖掘】时间序列预测-时间序列的平稳性

时间序列的平稳性 &#xff08;1&#xff09;平稳性定义&#xff08;2&#xff09;平稳性处理方法2.1 差分法2.2 季节调整&#xff08;Seasonal Adjustment&#xff09;2.3 趋势移除&#xff08;Detrending&#xff09;2.4 对数转换&#xff08;Logarithmic Transformation&…...

成都蒲江石象湖旅游攻略之石象湖郁金香最佳观赏时间

石象湖坐落于成都蒲江&#xff0c;拥有绝美的郁金香花海&#xff0c;吸引了很多的游客。如果大家想要观赏比较诱惑人的郁金香&#xff0c;那自然就应该知道正确的观赏时间。 心想郁金香合适的时间是每年的3月份到3月底。石象湖会还会举办盛大的郁金香节&#xff0c;在花园内有数…...

大模型、知识图谱和强化学习三者的结合,可以形成哪些研究方向?

大模型(Large Language Models, LLMs)、知识图谱(Knowledge Graph, KG)与强化学习(Reinforcement Learning, RL)作为人工智能领域的三大核心技术,其融合正推动着认知智能迈向新高度。本文结合2023-2025年的最新研究成果,系统梳理三者结合的七大科研方向及其技术路径。 …...

Linux文件操作

在C语言中&#xff0c;我们已经学习了文件相关的知识&#xff0c;那么在Linux中我们为什么还要再来学习文件呢&#xff1f;这是因为C语言中和Linux中&#xff0c;"文件"是2个不同的概念。所以我们要来学习Linux中对文件的操作。 在学习之前&#xff0c;我们先来回顾一…...

PostSwigger Web 安全学习:CSRF漏洞3

CSRF 漏洞学习网站&#xff1a;What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF Token 基本原理 CSRF Token 是服务端生成的唯一、随机且不可预测的字符串&#xff0c;用于验证客户端合法校验。 作用&#xff1a;防止攻击…...

【Node.js 】在Windows 下搭建适配 DPlayer 的轻量(简陋)级弹幕后端服务

一、引言 DPlayer官网&#xff1a;DPlayer 官方弹幕后端服务&#xff1a;DPlayer-node MoePlayer/DPlayer-node&#xff1a;使用 Docker for DPlayer Node.js 后端&#xff08;https://github.com/DIYgod/DPlayer&#xff09; 本来想直接使用官网提供的DPlayer-node直接搭建…...

淘宝tb.cn短链接生成

淘宝短链接简介 1. 一键在线生成淘宝短链接tb.cn,m.tb.cn等 2. 支持淘宝优惠券短链接等淘宝系的所有网址 3. 生成的淘宝短链接是官方的&#xff0c;安全稳定有保证 4.适合多种场景下使用&#xff0c;如&#xff1a;网站推广&#xff0c;短信推广 量大提供api接口&#xff0…...

在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)

腾讯云对象存储数据万象&#xff08;Cloud Infinite&#xff0c;CI&#xff09;为用户提供图片、视频、语音、文本等文件的内容安全智能审核服务&#xff0c;帮助用户有效识别涉黄、违法违规和广告审核&#xff0c;规避运营风险。本文以音频审核为例给出go语言示例代码与相应结…...

优化无头浏览器流量:使用Puppeteer进行高效数据抓取的成本降低策略

概述 使用 Puppeteer 进行数据抓取时&#xff0c;流量消耗是一个重要考虑因素。特别是在使用代理服务时&#xff0c;流量成本可能显著增加。为了优化流量使用&#xff0c;我们可以采用以下策略&#xff1a; 资源拦截&#xff1a;通过拦截不必要的资源请求来减少流量消耗。请求…...

【C语言】fprintf与perror对比,两种报错提示的方法

它们的主要区别在于 信息来源 和 自动包含的系统错误详情。 1. fprintf(stderr, "自定义错误信息\n"); 功能: 这是标准库中的一个通用格式化输出函数。你可以用它向任何文件流&#xff08;包括 stdout 标准输出, stderr 标准错误, 或任何用 fopen 打开的文件&#x…...

C语言复习笔记--内存函数

在复习完字符函数和字符串函数之后,今天让我们复习一下内存函数吧.这一块的东西不太多,并且与之前的字符串函数有一些地方很相似,所以这里应该会比较轻松. memcpy使用和模拟实现 老规矩,先看函数原型 void * memcpy ( void * destination, const void * source, size_t num );…...

前端面试高频算法

前端面试高频算法 1 排序算法&#xff1b;1.1 如何分析一个排序算法1.1.1 执行效率3.1.2 内存消耗1.1.3 稳定性 1.2 冒泡排序&#xff08;Bubble Sort&#xff09;1.3 插入排序&#xff08;Insertion Sort&#xff09;1.4 选择排序&#xff08;Selection Sort&#xff09;1.5 归…...

云原生--核心组件-容器篇-4-认识Dockerfile文件(镜像创建的基础文件和指令介绍)

1、Dockerfile的定义与作用 定义&#xff1a; Dockerfile是一个文本文件&#xff0c;包含一系列Docker指令&#xff0c;用于自动化构建Docker镜像。Docker 在构建镜像时会按照Dockerfile中的指令逐步执行&#xff0c;每一行指令都会生成一个新的镜像层&#xff08;layer&#x…...

13.组合模式:思考与解读

原文地址:组合模式&#xff1a;思考与解读 更多内容请关注&#xff1a;7.深入思考与解读设计模式 引言 在软件开发中&#xff0c;是否曾经遇到过这样一种情况&#xff1a;你有一个对象&#xff0c;它本身很简单&#xff0c;但是它包含了其他类似的对象。随着系统变得越来越复…...

Pycharm(十七)生成器

一、生成器介绍 1.1 概述 生成器指的是Generator对象&#xff0c;它不再像以往一样&#xff0c;一次性生成所有的数据&#xff0c;而是用一个&#xff0c;再生成一个&#xff0c;基于用户写的规则&#xff08;条件&#xff09;来生成数据&#xff0c;如果条件不成立&#xff…...

盛元广通实验材料管理系统-实验室管理系统-LIMS

一、引言 在当下科学研究及各类实验日益频繁的背景下&#xff0c;实验材料管理成为实验室高效运作的核心环节。从“人工低效”到“智能自动化”&#xff0c;盛元广通可覆盖实验材料的采购、存储、使用、追踪等全流程&#xff0c;从功能适配性、技术性能、成本效益、供应商服务…...

检查 NetCDF Fortran的版本

执行 nf-config --all命令后&#xff0c;它会输出一堆信息&#xff0c;大致像这样&#xff1a; This netCDF-Fortran version: 4.6.0 netCDF-Fortran installation dir: /usr/local/netcdf4 Fortran compiler: gfortran Fortran compiler flags: -g -O2 Fortran preprocesso…...

MySQL 存储引擎与服务体系深度解析

一、存储引擎核心概念 基本定义 存储引擎:MySQL服务的核心组件,负责数据的存储、检索和管理版本演进: MySQL 5.0/5.1 默认使用MyISAM引擎MySQL 5.5/5.6+ 默认采用InnoDB引擎关键特性 不同存储引擎采用不同的数据存储结构和处理机制直接影响表的CRUD操作性能和数据安全特性作…...

乐企数电发票分布式发票号码生成重复的问题修复思路分享

文章目录 1.前言2.解决思路2.1错误姿势2.2歪打正着2.3正确姿势 3.总结 1.前言 由于之前接了乐企数电开票&#xff0c;服务上线之后&#xff0c;使用的公司少没有啥问题&#xff0c;后面切换了两家日开票量大的公司上线之后&#xff0c;就发现发票号码生成重复了&#xff0c;后面…...

多级缓存架构设计与实践经验

多级缓存架构设计与实践经验 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于多级缓存的架构设计和实践经验。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。请问您对多级…...

LCD1602液晶显示屏详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图​编辑 2.接口说明 三、程序设计 main文件 lcd1602.h文件 lcd1602.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 LCD1602A字符型液晶显示模块是专门用于显示字母、数字元、符号等的点阵型液晶显示模块。分4位和8位数据…...

Golang | 集合求交

文章目录 bitmap求交集2个有序链表多个有序链表跳表 bitmap求交集 2个有序链表 多个有序链表 为什么非最大的所有都要往后移动呢&#xff1f;因为现在已经知道交集即使有&#xff0c;也最小都是这个目前最大的了&#xff0c;其他不是最大的不可能是交集&#xff0c;所有除了最大…...

手机充电进入“秒充“时代:泡面刚下锅,电量已满格

现代人的生活节奏越来越快&#xff0c;手机充电技术也在飞速发展。从最初的"充电一整晚"到如今的"秒充"时代&#xff0c;充电效率的提升正在悄然改变着我们的生活习惯。最新数据显示&#xff0c;目前最快的手机充电技术仅需4分30秒就能充满一部手机的电量&…...

网站字体文件过大 导致字体从默认变成指定字体的时间过长

1.选择字体中只用到的字符集较小的包 只用到了数字&#xff0c;所以使用了 xx-sans.ttf的版本(86kb) 2.转换ttf格式为woff2 转换后26kb 3.使用字体 // 定义字体 font-face {font-family: "myFont";src: url(/assets/fonts/myFont.woff2) format(woff2);font-weigh…...

WPF常用技巧汇总 - Part 2

WPF常用技巧汇总-CSDN博客 主要用于记录工作中发现的一些问题和常见的解决方法。 目录 WPF常用技巧汇总-CSDN博客 1. DataGrid Tooltip - Multiple 2. DataGrid Tooltip - Cell值和ToolTip值一样 3. DataGrid Tooltip - Cell值和ToolTip值不一样 4. DataGrid - Ctrl A /…...

C++中析构函数

析构函数 析构函数&#xff08;Destructor&#xff09;是类的一种特殊成员函数&#xff0c;用于在对象的生命周期结束时执行清理操作&#xff0c;他的主要作用是释放对象占用资源&#xff0c;例如动态分配的内存&#xff0c;文件句柄或网络连接等。 特点 名称与类名称相同 单…...

树莓派超全系列教程文档--(44)如何在树莓派上编译树莓派内核

如何在树莓派上编译树莓派内核 构建内核下载内核源代码 本地构建内核构建配置使用 LOCALVERSION 自定义内核版本构建安装内核 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 构建内核 操作系统预装的默认编译器和链接器被配置为构建在该操作系统…...

flask返回文件的同时返回其他参数

参考:flask实现上传文件与下载文件_flask 文件上传和下载-CSDN博客 在 Flask 中,返回文件的同时附加额外参数(如处理时间)可以通过 自定义 HTTP 响应头 或 返回 JSON 数据与文件结合 的方式实现。以下是具体方法和示例: 方法 1:通过 HTTP 响应头 附加参数(推荐) 将参…...

C++23 std::move_only_function:一种仅可移动的可调用包装器 (P0288R9)

文章目录 一、定义与基本概念1.1 定义1.2 基本概念 二、特点2.1 仅可移动性2.2 支持多种限定符2.3 无target_type和target访问器2.4 强前置条件 三、使用场景3.1 处理不可复制的可调用对象3.2 性能优化3.3 资源管理 四、与其他可调用包装器的对比4.1 与std::function的对比4.2 …...

Zookeeper实现分布式锁实战应用

Zookeeper实现分布式锁实战应用示例 1. 分布式锁概述 在分布式系统中&#xff0c;当多个进程或服务需要互斥地访问共享资源时&#xff0c;就需要分布式锁来协调。Zookeeper因其强一致性和临时节点特性&#xff0c;非常适合实现分布式锁。 2. Zookeeper实现分布式锁的核心原理…...

使用 Playwright 构建高效爬虫:原理、实战与最佳实践

随着网站前端技术日益复杂,传统的基于请求解析(如 requests、BeautifulSoup)的爬虫在处理 JavaScript 渲染的网站时变得力不从心。Playwright,作为微软推出的一款强大的自动化浏览器控制框架,不仅适用于自动化测试,也成为了处理现代网站爬取任务的利器。 本篇文章将带你…...

ComfyUI for Windwos与 Stable Diffusion WebUI 模型共享修复

#工作记录 虽然在安装ComfyUI for Windwos时已经配置过extra_model_paths.yaml 文件&#xff0c;但升级ComfyUI for Windwos到最新版本后发现原先的模型配置失效了&#xff0c;排查后发现&#xff0c;原来是 extra_model_paths.yaml 文件在新版本中被移动到了C盘目录下&#x…...

【RabbitMQ消息队列】详解(一)

初识RabbitMQ RabbitMQ 是一个开源的消息代理软件&#xff0c;也被称为消息队列中间件&#xff0c;它遵循 AMQP&#xff08;高级消息队列协议&#xff09;&#xff0c;并且支持多种其他消息协议。 核心概念 生产者&#xff08;Producer&#xff09;&#xff1a;创建消息并将其…...

【MySQL数据库入门到精通-08 约束】

文章目录 4、约束4.1 概述4.2 约束演示1. 根据需求&#xff0c;完成表的创建2. SQL数据库3. 结果 4.3 外键约束4.3.1 介绍1. 根据需求&#xff0c;完成表的创建2. SQL数据库3. 结果4.3.2 外键约束建立1. 语法2. SQL语句3. 现象4.3.3 外键删除更新行为1. 知识点2.SQL3.结果 4、约…...

C++笔记-模板进阶和继承(上)

一.模板进阶 1.1非模板类型参数 那之前学过的stack举例&#xff0c;在这之前我们如果要用N&#xff0c;就要用宏来定义&#xff0c;但是宏毕竟有局限性&#xff1a; 如果我要用到两个stack&#xff0c;一个要求10个空间&#xff0c;另一个要求100空间呢&#xff1f; 这时候…...

云计算赋能质检LIMS的价值 质检LIMS系统在云计算企业的创新应用

在云计算技术高速发展的背景下&#xff0c;实验室信息化管理正经历深刻变革。质检LIMS&#xff08;实验室信息管理系统&#xff09;作为实验室数字化转型的核心工具&#xff0c;通过与云计算深度融合&#xff0c;为企业提供了高弹性、高安全性的解决方案。本文将探讨质检LIMS在…...

2025系统架构师---数据抽象(Data Abstraction)‌与‌面向对象架构风格

引言 在软件系统复杂度与规模不断攀升的今天&#xff0c;如何设计出可扩展、易维护且能快速响应需求变化的架构&#xff0c;是每一位系统架构师面临的挑战。‌数据抽象&#xff08;Data Abstraction&#xff09;‌与‌面向对象架构风格&#xff08;Object-Oriented Architectu…...

[python] 基于WatchDog库实现文件系统监控

Watchdog库是Python中一个用于监控文件系统变化的第三方库。它能够实时监测文件或目录的创建、修改、删除等操作&#xff0c;并在这些事件发生时触发相应的处理逻辑&#xff0c;因此也被称为文件看门狗。 Watchdog库的官方仓库见&#xff1a;watchdog&#xff0c;Watchdog库的官…...

缺省处理、容错处理

布尔判定 假&#xff1a;false 0 null undefined NaN 可选符.?和&#xff1f;&#xff1f; let obj {name: jim,data: {money: 0,age: 18,fn(a){return a}} }1、如果左侧的值为null或者undefined&#xff0c;则使用右侧值。需要使用"??" obj?.data?.a…...

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

背景 纯血鸿蒙逐渐成为全球第三大操作系统&#xff0c;业界也掀起了适配鸿蒙原生的浪潮&#xff0c;用户迁移趋势明显&#xff0c;京东作为国民应用&#xff0c;为鸿蒙用户提供完整的购物体验至关重要。 &#xfeff; &#xfeff;&#xfeff; 去年 9 月&#xff0c;京东 AP…...

Java基础——排序算法

排序算法不管是考试、面试、还是日常开发中都是一个特别高频的点。下面对八种排序算法做简单的介绍。 1. 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a;相邻元素比较&#xff0c;每一轮将最大元素“冒泡”到末尾。 示例数组&#xff1a;[5, 3, 8, 1, 2] pub…...

【操作系统原理07】输入/输出系统

文章目录 零.大纲一.I/O设备的概念和分类0.大纲1.什么是I/O设备2.I/O分类 二.I/O控制器0.大纲1.I/O设备的电子部件&#xff08;I/O控制器&#xff09;2.IO控制器组成3.内存映像I/O VS 寄存器独立编址 三.I/O控制方式0.大纲与总结1.程序直接控制方式&#xff08;1&#xff09; 操…...

IM云端搜索全面升级,独家能力拓展更多“社交连接”玩法

在这个数字时代&#xff0c;网络让信息传递前所未有的便捷&#xff0c;但同时&#xff0c;海量数据堆积也让内容检索变得像大海捞针。尤其是在我们日常工作生活中最常用的即时通信软件中&#xff0c;信息的快速查找和精准定位正变得越来越重要。 但传统的本地搜索功能受限于设…...

汽车产业链主表及类别表设计

&#xff08;提前设计&#xff0c;备用&#xff09; 一、汽车产业链类别表&#xff08;industry_chain_category&#xff09; 设计要点 1、核心字段&#xff1a;定义产业链分类&#xff08;如零部件、整车制造、销售服务等&#xff09; 2、主键约束&#xff1a;自增ID作为唯一标…...

有效的字母异位词

recorded&#xff1a;用于统计或抵消字符出现次数。 class Solution { public:bool isAnagram(string s, string t) {int record[26]{0};for(int i0;i<s.size();i){record[s[i]-a];}for(int i0;i<t.size();i){record[t[i]-a]--;}for(int i0;i<26;i){if(record[i]!0){…...

汽车网络安全 -- 理解暴露面、攻击面和攻击向量

1.暴露面是攻击面的子集 举个例子&#xff0c;房子都有门、窗户&#xff0c;这些窗户、门不管是否打开&#xff0c;都可能被小偷利用进入到房内&#xff0c;因此这些门窗可能是潜在的漏洞&#xff0c;所以称之为攻击面(Attack Surface)。 小偷经过长期观察&#xff0c;发现家…...