# REA (collectrea.com) 爬虫文档 ## 1. 目标信息 - **URL**:https://collectrea.com/search - **技术栈**: - 站点:Laravel + **Livewire** + **Alpine.js**,页面**服务端渲染(SSR)**,无独立数据 API - CDN / 防护:**Cloudflare**(拍品图在 `rea-image-archive.nyc3.cdn.digitaloceanspaces.com`) - HTTP:`curl_cffi`(带 `impersonate` 浏览器指纹,过 Cloudflare 的 TLS 指纹校验) - 解析:`parsel.Selector`(CSS + XPath) - 调度:`schedule`;日志:`loguru`;重试:`tenacity`;连接池:`charley-utils` 的 `MySQLConnectionPool` - **数据目标**:拍卖会(场次)下所有拍品(lot)的列表与详情,含标题、成交价等 5 个明细字段与多图。 ### 抓取层级(三级) ``` /search 场次列表 → /archives/{year}/{month}/ 场次内 lot 列表 → lot 详情页 ``` ### 字段一览(表 `rea_record`,见 create_table.sql) | 字段 | 阶段 | 说明 | |---|---|---| | `auction_key` | 一 | 场次唯一标识,如 `2025/spring`(由 URL 派生,**增量差集依据**) | | `auction_name` | 一 | 场次展示名,如 `Spring 2025` | | `lot_id` | 一 | 站内 lot 唯一 id(列表卡片的数字 `wire:key`) | | `lot_number` | 一 | lot 编号(详情 URL 中的段) | | `slug` | 一 | 详情 URL 末段 slug | | `detail_url` | 一 | 详情页绝对 URL(**唯一索引**,幂等去重) | | `title` | 二 | 拍品标题(详情页 `h1`) | | `sold_for` | 二 | 成交价,纯数字串如 `336000`;未成交为空 | | `year` | 二 | 拍品年份,如 `1916` | | `auction` | 二 | 详情页场次名,如 `2025 Spring` | | `lot_no` | 二 | 详情页 Lot 编号(应与 `lot_number` 一致,可交叉校验) | | `category` | 二 | 分类,如 `Prewar Baseball Cards (1900-1941)` | | `imgs` | 二 | 详情多图 URL 逗号拼接 | | `state` | 二 | 详情抓取状态:0/null 待抓,1 已抓,2 失败 | > 阶段一(`crawl_one_auction`)只产出前 6 个字段;`title`~`imgs`、`state` 由阶段二(`update_details_for_pending`)写入。这是主公在 img_1.png 里圈定的「标题 + 5 行明细 + 多图」。 --- ## 2. 请求分析 ### 关键接口(全部为 SSR 页面,无 JSON API) | 接口 | 方法 | 用途 | |---|---|---| | `/search` | GET | 场次列表页。三个 tab 面板:RECENT / AUCTION ARCHIVE / PAST CATALOG | | `/archives/{year}/{month}/?page=N&pageSize=M` | GET | 某场次的 lot 列表,**用查询参数翻页** | | `/archives/{year}/{Season}/{lotNumber}/{slug}` | GET | lot 详情页,取标题 / 5 字段 / 多图 | ### 场次列表:三个 tab 面板 `/search` 页是 Alpine.js 的 tab 组件。**注意 `curl_cffi` 拿到的是 Alpine 未执行的原始 HTML**, 面板不能靠 Alpine 解析后的 `aria-labelledby="tab-1-1"` 区分,只能按 `role="tabpanel"` 的**文档顺序**: | 面板顺序 | tab | 内容 | 数量 | 本爬虫 | |---|---|---|---|---| | 第 1 个含链接面板 | RECENT AUCTIONS(最近) | Swiper 封面卡 | 16 | **增量只抓这个** | | 第 2 个含链接面板 | AUCTION ARCHIVE(历史) | 按年份分组文字链 | 68 | 全量抓这个 | | 第 3 个面板 | PAST CATALOG | `