# Scrapling 自适应选择器教程：网页改版后找回同一条记录，拦住相似卡片误匹配

Scrapling原生adaptive找回改类名目标，并以业务ID拒绝同名干扰；仅解析本地原创HTML。

## 环境

- Python 3.12+；在 reference 中 pip install -r requirements.txt。

## 启动

~~~sh
cd reference
python3 verify.py
# 运行后查看原生结果阅读器（读取records.json）
python3 -m http.server 8787
# 打开 http://127.0.0.1:8787/report.html
~~~

## 七步操作

1. 准备旧版网页

输入是本机原创 HTML：目标业务 ID 为 r42，另有同名的 r99 干扰记录。旧版 article.old 下有名称与价格，所有输入都随练习包提供，不访问第三方站点。

2. 保存选择器特征

使用原生 Scrapling Selector 开启 adaptive，并对旧选择器执行 auto_save。特征存储只在临时目录中产生，下载包不包含运行时数据库。

3. 替换类名

把目标的 CSS 类名从 old 改为 new，并将价格由89改为95。普通 article.old 查询应返回零条，这一步证明旧选择器确实已经失效。

4. 读取自适应候选

对同一 URL 身份运行 adaptive=True，读取真正由 Scrapling 返回的候选。保留业务 ID、名称和价格，不能把页面上第一个同名元素直接当作原目标。

5. 拒绝同名误认

再移除 r42，仅保留同名 r99。即使自适应评分找到相似结构，业务层必须因 ID 不匹配拒绝接纳；候选不是已确认的正确记录。

6. 核对字段变化

接受的目标必须仍为 r42，名称为恒星，价格为95。通过字段对照确认定位和内容两件事，不把“返回了一个元素”当作正确抓取。

7. 保存抓取规则

阅读 reference/verify.py 中旧页、新页和目标删除三份输入。复跑会重建隔离特征存储；这篇只验证本地解析与身份核对，不提供绕过登录或反爬的操作。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://github.com/D4Vinci/Scrapling
