尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
反爬对抗实战:从请求头到浏览器自动化的完整破解链路
接到一个数据采集需求目标是一个严格限制访问的数字资源站点。页面本身看起来平静但一旦请求频率上来反爬机制立刻启动封IP、弹验证码、返回混淆过的数据。搞了几天从裸请求被秒拒到最终跑通全流程中间踩了不少坑。这篇文章是对某数字资源站点反爬机制的一次完整复盘主要围绕几个核心问题展开目标站点用了哪些反爬手段、各层级的触发条件是什么、对抗策略怎么设计、以及在实战中如何排查问题。内容不会涉及任何破解账号、绕过付费之类的东西聚焦在反爬对抗的纯技术层面。适合有Python爬虫基础、想系统了解反爬对抗思路的开发者阅读。1. 项目定位与攻防博弈思路1.1 需求场景还原先说背景。我当时接到的需求是采集一个学术类数字资源站点的公开书目元数据包括标题、作者、摘要、分类这些字段。这个站点对外宣称开放部分数据但它并没有提供公开API数据的唯一获取方式就是通过网页浏览。换句话说合法的数据就在页面上问题只是如何高效、稳定地把它们取下来。第一版方案很简单直接用requests请求列表页解析HTML拿到数据。结果刚跑了几十个请求对方的防御就来了。先是正常的页面突然返回一个JS挑战页随后部分请求直接超时再往后整个出口IP段都被限制访问。这个站点的反爬强度远超预期不是普通的UA检测或者简单的频率限制而是一套组合策略。项目从一开始就不是写个爬虫解析页面那么简单而是要先搞清楚对方的反爬体系是怎么设计的每一道关卡在什么条件下触发然后再针对性地设计绕过策略。1.2 反爬对抗的本质一场分层博弈爬虫对抗的本质其实是一个动态博弈过程。服务端保护数据的手段从来不是单一关卡而是多层递进的防御体系。用生活化的类比来说就像去一栋办公楼第一道是门卫查证件请求头校验第二道是闸机刷卡访问频率控制第三道是前台登记行为分析第四道甚至还有内部区域的动态口令JS加密参数。对爬虫方来说核心思路不是突破某一层而是让每一层都认为你是正常的访客。这听起来简单实际做起来就复杂了因为你不知道对方每一层的确切判断标准。反爬系统不会告诉你因为UA不合法所以你被拒了它只会给你一个模糊的信号——要么是验证码要么是空白页要么是错误状态码。所以项目的第一个阶段花费了大量时间做摸查也就是搞清楚目标站点的防御边界。这个过程需要刻意控制变量同一个IP换个UA试试同一个UA换个访问频率试试同样的资源从浏览器访问和从脚本访问对比结果。每一条线索记录下来最后拼出一张完整的反爬机制图谱。1.3 技术路线选型轻量优先加浏览器兜底摸清防御布局之后要设计对抗方案。当时摆在面前的有两条路线第一条是纯请求库路线基于requests/httpx直接模拟HTTP请求通过构造请求头、维护会话、控制节奏来完成采集。优点是速度快、资源开销小缺点是如果站点的检测到了浏览器指纹层面纯请求库几乎没有还手之力。第二条是以Playwright或Selenium为核心的浏览器自动化路线。浏览器自动化几乎能规避所有基于浏览器环境的检测因为你的流量本质上就是真实浏览器的行为代价是速度慢、CPU和内存开销大、部署复杂度高。做了一段时间的权衡之后我最终选择了轻量优先、浏览器兜底的混合方案。先用纯请求库去摸底把所有能通过请求模拟解决的问题都解决掉。只有遇到纯请求方式完全无法绕过的关卡比如涉及JS运行时计算的动态令牌才切换浏览器自动化来处理。这个选择基于一个很现实的理由资源站点的数据总量通常很大如果从头到尾都跑浏览器采集效率会低到不可接受。2. 目标反爬机制全景拆解2.1 请求入口层UA与请求头多重校验目标站点的第一道关卡是请求头校验。普通的爬虫脚本如果直接用默认的Python UA访问几乎必然被拦截。当时我随手加了一个浏览器UA测试以为就万事大吉了结果依然被拒。原因在于对方的校验比想象中严格得多。除了User-Agent它还校验了Referer、Accept-Language、Accept-Encoding、Connection等多个头的组合模式。单一头的伪造很容易难的是模拟浏览器发出的那套完整请求头序列。比如一个真实的Chrome浏览器请求Accept-Language的顺序是zh-CN,zh;q0.9,en;q0.8Sec-Fetch-Dest是documentSec-Fetch-Mode是navigateSec-Fetch-Site是none。这些字段在真实访问中各有含义只有组合在一起才是合理的。所以这个关卡不能靠随手设置某一个头来突破而是要构建一个完整的浏览器画像。这里的核心思路是先打开浏览器开发者工具把目标页面发出的所有请求头复制下来作为一个基准模板然后在代码里原样还原这套模板。注意是作为基准但不是完全相同因为如果完全一样又会暴露出模板痕迹——所有请求的请求头字节级相同本身就是反常信号。当时做了一个请求头管理模块维护一组不同的头部配置文件每个文件的UA、Accept顺序、Sec-Fetch字段组合都有一点细微差异每次请求轮换使用。这种做法极大降低了请求头层面的指纹重合度。2.2 行为层速率控制与IP信誉管理过了请求头这关下一道关卡是行为检测。这里的校验维度主要有两个频率和IP信誉。频率控制比较好理解。如果同一个IP在短时间内发起密集请求不管请求头构造得多完美都会被判定为异常。目标站点采用的不是简单的单次请求间隔校验而是滑动窗口统计——在一个时间窗口内累计请求次数超过阈值就触发拦截。窗口大小和阈值无法直接探测只能通过递进式加压来观察。IP信誉则更复杂。这里的IP信誉指的不仅是某一个具体IP的历史行为还包括它所在的IP段是否被标记。数据中心的IP段、云服务器IP段因为被大量爬虫滥用往往被列入高风险名单。当请求来自这些段的IP时即使单次请求很正常服务端也可能直接要求验证码验证。在这一层吃过不少亏。当时尝试用云服务器作为出口IP结果发现只要流量稍大站点就会在几次正常响应之后突然弹出验证码。后来分析得出目标站点大概率对云服务商网段做了特殊标记这些段的请求需要额外通过验证才会放行。2.3 浏览器层JS渲染与动态令牌如果说前两层还能靠请求模拟混过去第三层就是分水岭了。目标站点的部分核心数据接口在请求时会校验一个动态令牌。这个令牌既不是固定的也不是简单的服务器下发的公共参数而是在页面加载时通过JavaScript代码动态计算生成的。这种情况在业内有个形象的叫法——JS挑战。服务端返回一段包含混淆逻辑的JavaScript浏览器执行后生成本地Cookie或请求参数下一次请求带上这些值才会被放行。用纯requests方式去模拟要么手动逆向下这段JS逻辑成本极高要么直接无解。当时也尝试过分析那段JS代码的算法用Node.js模拟计算。但很快发现对方的JS混淆做得非常彻底变量名无意义、控制流平坦化、字符串数组滚动加密逆向一轮的时间成本已经超出了项目容忍范围。这个关卡给出的结论是直接上浏览器自动化。因为既然是浏览器环境才能计算出的值那就让浏览器替我们去算顺势作为整个方案的兜底手段。2.4 数据层字体反爬与接口返回混淆请求头、频率、动态令牌都属于访问控制层面而数据层本身也可能做手脚。字体反爬是这类资源站点比较钟爱的方案。它的原理是HTML里显示的字符编码并不是真实的字符码而是被映射到一套自定义字体文件中打乱过的文字。直接看HTML源码会发现一串乱码必须配合字体文件做解码还原否则采集到的数据全是错的。这个站点就在关键字段如标题和作者名上使用了字体映射。当时解析到的HTML里正常的计算两个字显示为缁嗗皬绫昏〃。如果没意识到字体反爬的存在这批数据采集回来也是废的格式上完全没法用。另一个数据层防御是接口返回内容的混淆。部分列表页的数据并非服务端渲染在HTML里而是通过异步接口返回一段加密的JSON。接口内容整体做了对称加密处理密钥隐藏在JS中解密逻辑同样经过混淆。只有把浏览器自动化打开让页面自行完成解密渲染才能拿到洁净的数据。3. 对抗策略与核心环节实现3.1 请求头模拟与指纹平滑第一层的对抗方案需要做两件事一是构建完整且可轮换的请求头配置二是保证请求头组合的平滑度。平滑度这个词是我自己归纳的意思是请求头组合看起来要像一个真实用户在自然浏览时的状态。这里有一些点值得注意UA与平台要匹配。如果你模拟的是Chrome on Windows的UASec-Fetch-Prefetch这类参数就不能出现在移动端特征的位置。顺序要合理。请求头字段在传输时的顺序也是一项指纹信息虽然请求头本质上是无序的KV对但不同浏览器的发送顺序存在差异。动态值要动态处理。如果页面种了Cookie后续请求必须携带并更新而不是每请求就新建会话。下面是我当时封装的一个简易请求头轮换器的伪代码框架思路是维护多个配置模板import random BROWSER_HEADERS [ { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, Sec-Fetch-Dest: document, Sec-Fetch-Mode: navigate, Sec-Fetch-Site: none, Sec-Fetch-User: ?1, }, { User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: en-US,en;q0.9,zh-CN;q0.8,zh;q0.7, Sec-Fetch-Dest: document, Sec-Fetch-Mode: navigate, Sec-Fetch-Site: same-origin, }, ] def get_headers(url): return { headers: random.choice(BROWSER_HEADERS), Referer: url, }这版之后还需要维护一个会话对象让Cookie在连续请求中正常流转。这里的关键点是requests.Session会自动处理服务端Set-Cookie这模拟了真实浏览器保存Cookie的行为。我踩过的坑是部分页面要求在跳转时带上Referer一旦缺少或填错页面会返回一个默认模板而不是实际数据。排查方法是在浏览器里观察正常请求的Referer值照着补上。3.2 代理池与请求节奏控制针对IP信誉问题唯一有效的办法是代理池。代理池的获取和维护是另一个大工程这里不展开讲渠道只聊使用策略。原则有一个代理池必须分层。出口IP分为高信誉住宅类、中信誉机房类、低信誉被广泛标记的段三档。不同反爬阶段使用不同档位的代理。前面提到的目标是公开展示的书目元数据数据量虽然大但服务端的容忍度相对高用中等信誉的IP加合理频率就能跑。一旦发现某个IP段被限制立即停止使用而不是继续重试。请求节奏控制有两个维度单IP频率和全局并发。我当时用的是随机间隔指数退避组合策略。单IP两次请求之间随机等待3到8秒——如果固定间隔反而容易被频率分析算法识别为机器行为。遇到403或429错误则按指数退避策略增加重试等待时间。一个具体的参数设计示例目标站点疑似在60秒窗口内允许单IP请求35次。为确保安全实际只设计为每分钟20次。这个设计留有充足余量也让被拦截概率大幅下降。代理池的使用还要避开另一个隐性坑同一个请求重试时不要每次都重新从池里随机挑选代理这会让会话状态丢失。正确做法是同一会话内固定代理失败重试时加大延迟延迟耗尽后再换IP。3.3 浏览器自动化兜底方案说完了能靠请求模拟解决的部分剩下的是必须用浏览器自动化解决的部分。针对JS动态令牌和接口内容加密Playwright是当时的首选。Playwright的启动参数和上下文配置有讲究默认状态很容易被检测到。当时的关键做法使用launch_persistent_context启动持久化上下文而不是每次都创建临时profile减少浏览器指纹变化。注入stealth脚本隐藏navigator.webdriver标志和相关属性。使用真实的时间等待和鼠标移动动作代替page.wait_for_timeout。核心采集逻辑比较简单用Playwright打开目标页面等待页面完全加载把接口返回的数据从页面上下文中提取出来再用正则或选择器解析。因为整个流程跑在真实的浏览器里动态令牌、解密逻辑、字体映射全部由浏览器自己完成采集到的数据是干净的。这里有一个值得说的性能问题。浏览器自动化的吞吐量远低于纯请求方案。一个Playwright实例同时只开一个Tab页面就算做多并发也需要多开浏览器实例。当时为了平衡设计了浏览器实例池固定开5个实例每个实例处理一个独立分片的任务队列。3.4 指纹对抗的进阶细节浏览器自动化和纯请求方案的结合处有一个容易被忽略的技术细节TLS指纹。即使你用requests构造了和浏览器完全一致的请求头服务端仍然可以通过TLS握手过程中的特征来判断客户端类型。不同HTTP客户端Python requests、Go http、curl、Chrome在TLS ClientHello中的扩展顺序、椭圆曲线参数、签名算法都不同这些特征构成一个TLS指纹。目标站点不对触发这个级别的检测——从它允许在浏览器中交互访问来判断它更关注的是浏览器环境真实性而不是底层协议栈。但如果你的目标是更高阶的站点如电商、社交平台TLS指纹就是一个绕不开的检查点。处理TLS指纹的方案通常有两种一是使用curl_cffi这类模拟浏览器TLS指纹的请求库二是直接用浏览器自动化。当时评估下来目标站点还没上这个深度用Pure requests已够用。保留这个观察是为了提醒一个问题反爬对抗不是静态的对方的检测深度随时可能升级。3.5 验证码识别与降级策略验证码是所有爬虫项目最头疼的部分。目标站点在检测到可疑行为时会弹出一个交互式图片验证码。最初的应对方案是接入打码平台图片发给平台的人工或AI识别返回坐标后模拟点击。打码平台的响应时间通常在1到5秒之间与正常页面加载时间相比可以接受。但这里存在另一个问题打码平台也会收集你的行为特征如果短时间上传大量验证码平台侧可能会标记你的账户。这个问题背后的深层原因很多项目都会忽略验证码是反爬系统的最终裁决器大量验证码的出现本身就是异常信号。所以技术脱困的关键不在于提高识别率而在于降低触发率——把请求频率、请求头质量、IP信誉做到位让验证码根本不出现才是最优解。打个比方来看验证码出现频率就像退烧前的体温真正要治的病在体内代理质量、频率控制而不是在体表验证码本身。4. 踩坑实录与排查技巧4.1 五个高频问题速查表这一段把实战中遇到的高频问题整理成表格供直接对照排查。现象可能原因排查思路请求被重置或超时IP被临时限制换IP并等待封禁周期结束页面返回空白或跳转首页请求头不完整对比浏览器真实请求头补全动态字段突然出现验证码请求频率超标降低单IP频率增加间隔随机性数据乱码或错值浏览器字体反爬解析字体映射文件替换显示字符数据量越抓越少接口返回分页异常检查分页参数是否被服务端重置或请求头失效4.2 案例一被429封禁之后如何定位根因项目进行到第三天的时候出现了一次严重封禁。整个出口IP段被连续拒绝访问返回状态码全部是429。第一反应是继续切IP结果新切进来的IP也很快被封几乎是一批一批地送人头。停下来分析日志发现封禁时间点有一个规律每次都是在新一批IP接入后的30到60秒内触发。这个时间窗太短了说明问题不在频率控制上而是在其他维度暴露了非浏览器特征。后来把请求抓包和正常浏览器对比发现问题出在请求头缺失上。当时用requests发起请求时漏掉了Accept-Encoding字段。正常情况下浏览器会发送Accept-Encoding: gzip, deflate, br服务端据此压缩返回数据。脚本没有这个字段导致返回流量特征与其他请求明显不同短时间内的大量异常流量特征触发了服务端的自动封禁。补上这个字段并在请求头里加入Connection: keep-alive之后同样的频率下封禁不再发生。这个案例说明排查反爬问题不要一上来就怀疑对方的封禁策略有问题要先把自己的请求伪装做到位。4.3 案例二字体反爬的完整破解过程字体反爬在解析层面是一个标标准准的反直觉问题。第一眼看到HTML里的#x8ba1;以为是普通的HTML转义字符解析后得到的是计字然而页面上显示的却是另外一个完全无关的字。排查过程是这样的右键检查目标元素发现它的font-family指向一个自定义字体这个字体文件的地址在CSS里。把WOFF字体下载下来发现它的推荐表里的字形顺序完全是乱的。制作者把字形调整过位置使正常的文字码点对应到乱序的字形上。处理方案有两种方案一从网站加载的字体会解析出映射关系记录每个文字的码点和实际显示字形的映射制作一个替换字典。方案二用OCR方式直接对图片做文字识别绕开字体映射问题。在企业级项目中方案一是更优解原因在于它是无损的不依赖图像质量。但方案一也有坑字体映射字典并不是每次都一样对方可能定期更换字体。所以方案要设计成动态获取动态映射在采集时实时下载当前字体文件解析出映射而不是用缓存字典。4.4 日志监控体系反爬项目的地基做反爬对抗项目日志设计从一开始就不能省。当时把日志分成了三个等级Debug记录每一个请求的URL、状态码、耗时、IP归属地Info记录任务进度、页面解析结果计数Error记录所有异常和封禁事件。这个体系在后来的实际运行中起到了决定性作用。因为反爬对抗是一个迭代过程如果你的日志记录不够充分根本无法判断问题出在哪一环。比如当出现所有请求都失败的情况如果你没有为每个请求记录独立的出口IP入口信息后续定位是全局故障还是单IP故障就会变得异常困难。建议给每个请求打上唯一的请求ID关联当前使用的代理IP、请求头配置版本、响应状态和时间戳。这样出了问题直接按ID查日志链路定位效率成倍提升。5. 合规边界与工程化落地建议5.1 反爬对抗的合法边界这是所有技术方案执行前必须想清楚的问题。反爬对抗是双刃剑技术本身是中性的关键取决于使用场景。本文讨论的反爬机制分析其前提是采集公开可见的信息。在动手之前至少要确认三个问题数据是否公开可见。采集对象是页面公开渲染的内容不能绕过登录、付费或任何访问控制机制。采集规模是否合理。对大流量站点做采集会给服务端带来负载压力必须控制请求频率防止影响目标站点的正常服务。数据用途是否合法。采集的数据不能用于侵犯隐私、商业不正当竞争或违反平台规则的行为。如果发现自己需要用代理池秒级切换、破解加密接口后一定要停下来问一句我是不是已经越界了。在真实项目里数据采集红线没有中间地带超过合法边界的最佳处理方法是停止而不是优化绕过。5.2 工程化设计要点如果要在生产环境中长期运行这类采集任务而不是跑一次就结束以下几个工程化要点值得投入成本任务编排与分片。目标数据量大必须按类别或ID段分片支持断点续跑。我当时按分类字段拆了200个任务分片每个分片独立记录进度。失败重试与熔断机制。确认某类错误是永久性错误还是临时性错误。IP被封是临时的可以退避重试请求参数错误是永久的要立即停止并告警。监控与告警。当成功率下降超过阈值、验证码频率上升或代理池健康度不足时系统要能主动通知。还有一个真实体会代理池的健康度和采集成功率呈强相关。我在项目后期维护了一张代理健康表每使用一个IP都记录它的请求总数、失败率、首次失败时间。当失败率超过20%就自动降权成功率连续稳定则提权。这个简单策略帮我把整体采集成功率从90%拉到了98%以上。5.3 从反爬对抗到数据治理的一点思考做完整个项目后一个更深的体会是反爬对抗只是数据治理的一部分。数据采集只是起点清洗、去重、存储、更新、质量监控每个环节都可能成为瓶颈。花了大量精力把数据采下来如果后续的ETL流程跟不上前面的工作价值就被打了折扣。这次项目的产出梳理下来有三块可以复用一套爬虫对抗策略框架从请求头到IP调度到浏览器兜底分层设计不盲目投入全部技术手段。一批排查经验尤其是针对请求头细节、字体反爬、代理池健康度的认知能直接迁移到其他站点。一套日志和监控模板字段设计、告警规则在后续项目中几乎不用改就能用。技术栈的选型没有绝对的对错目标站点防御等级、数据规模、交付周期决定了什么方案最合适。这也是做这类项目的常态——没有一套能应对所有反爬机制的万能银弹所有方案都是在权衡中做出来的。回到开头那个问题为什么明明页面上就有数据还要费这么大劲去分析反爬机制因为直接拿数据的道路全被堵死了。爬虫对抗从来不是一条路径打到底的对抗而是对对方防御体系、自身技术边界、合规要求三者之间的持续调校。每次调校都是在加深对Web安全、HTTP协议和浏览器工作原理的理解。这种理解才是做爬虫对抗真正能沉淀下的东西。
RELATED

相关推荐

软件咨询公司面试全流程复盘:从HomeWork到结对编程的实战指南

软件咨询公司面试全流程复盘:从HomeWork到结对编程的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/13 4:02:14
Windows上部署Diffy:差分测试工具实现接口回归对比

Windows上部署Diffy:差分测试工具实现接口回归对比

1. 项目拆解:Diffy到底解决什么问题把Diffy部署到Windows上,这件事听起来不过是一次Java进程的启动,但真正做下来,你会发现项目选型、依赖下载、启动参数和结果解读都有一堆可以聊的细节。Diffy本身是一个开源的差分测试工具&…

📅 2026/10/13 3:57:13
React Native开发OpenHarmony应用:大文件上传断点续传实践

React Native开发OpenHarmony应用:大文件上传断点续传实践

最近在搞一个基于OpenHarmony的跨平台应用,业务方要求实现大文件上传功能,而且明确点名要“断点续传”。之所以用到React Native,是因为团队里前端工程师居多,Native层只有一个人维护,如果纯用ArkTS写全套业务&#xf…

📅 2026/10/13 3:57:13
MORE NEWS

更多资讯

📰

Dinic最大流算法详解:分层图、多路增广与当前弧优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

ReactDOMRoot源码解析:从createRoot到render的完整链路

做React源码分析&#xff0c;很多人一上来就啃scheduler调度器或者fiber架构&#xff0c;结果被lane、workLoop这些概念劝退。我自己的经验是&#xff0c;不如先从ReactDOMRoot入手——这是每个React应用真正的起点&#xff0c;你天天写的createRoot(...).render(<App/>)…

📰

MySQL学生选课系统源码实战:表结构设计与事务并发控制

简介&#xff1a;这份资源是面向高校计算机相关专业学生与毕业设计开发者的一套MySQL学生智能选课系统完整资料&#xff0c;包含源码、数据库与配套论文&#xff0c;适合作为课程设计、毕业设计或SSM框架练手项目。系统围绕学生、教师与课程之间的信息交互展开&#xff0c;重点…

📰

MySQL学生智能选课系统:数据库设计、事务锁与高并发避坑指南

简介&#xff1a;这份资源是面向高校计算机相关专业学生与毕业设计开发者的一套MySQL学生智能选课系统完整资料&#xff0c;包含源码、数据库与配套论文&#xff0c;适合作为课程设计、毕业设计或Java Web入门练手项目。系统围绕学生选课场景设计&#xff0c;覆盖课程浏览、教师…

📰

CPU指令执行五阶段硬件原理与流水线设计

1. 这不是普通笔记&#xff0c;是理解CPU如何“思考”的底层地图你有没有想过&#xff0c;当你敲下gcc hello.c&#xff0c;再运行./a.out&#xff0c;那一行行C代码究竟是怎么变成屏幕上跳出来的“Hello World”的&#xff1f;它没长腿&#xff0c;不会自己跑&#xff1b;它没…

📰

PCA-LSTM多变量时间序列预测:从高维特征压缩到时序建模实战

既然标题已经这么直白了&#xff0c;我也就不绕弯子。PCA-LSTM预测模型&#xff0c;说白了就是先让PCA把高维特征“挤一挤”&#xff0c;去掉冗余和噪声&#xff0c;只留下最能代表原始数据变化的主成分&#xff0c;然后再把这条压缩后的时间序列喂给LSTM去学长期依赖&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬