fix(sites): 按真实列表页修正 OurBits / 彩虹岛 / 憨憨 解析

2026-10-02 用真实账号各抓一次列表页与用户页(只读)核对:
- OurBits:标题列嵌套 table.torrentname 有 5 个 td,td:nth-child(n) 先命中嵌套格子,
  大小全为 0、发布时间 N/A;改为只匹配行的直接子单元格。副标题原取成标签块,改为标签之后的正文;
  新增标签与列表页 IMDb / 豆瓣 ID(label.imdb_rate / douban_rate 的 data 属性)
- 彩虹岛:font.subtitle 去掉前面的 div.tag 与末尾徽标,标签单独取
- 憨憨:新增列表标签(span.tag,不含促销)
- 纯数字 IMDb ID 补成 tt + 7 位(imdbIdOf)
- 用户页核对:下载量为 0 是站点实际显示(VIP),解析正确;上传量四站与页面一致
- 脱敏样例 sites-2026.ts + 定义测试;差分登记 23 条有意偏离(新增 labels、OurBits 副标题)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-02 20:16:27 +08:00
1 parent cac1833f53
commit 64e1dfb1d2
12 files changed
+327 -16

No files matched your search

@@ -1,5 +1,5 @@
{
"$comment": "CHDBits 分类名取自 MovieClaw chdbits.yaml 注释(TV Series / TV Shows / Sports / Music Videos / HQ Audio)。",
"$comment": "CHDBits 分类名取自 MovieClaw chdbits.yaml 注释(TV Series / TV Shows / Sports / Music Videos / HQ Audio)。 2026-10-02 真实列表页核对:font.subtitle 里先是 div.tag 标签再是副标题,末尾 div.circle 徽标;副标题去掉 div,标签取 div.tag。",
"umt": {
"categoryNames": {
"401": "电影",
@@ -12,5 +12,16 @@
"408": "HQ Audio",
"409": "其他"
}
},
"torrents": {
"fields": {
"description": {
"selector": "font.subtitle",
"remove": "div"
},
"labels": {
"selector": "font.subtitle div.tag"
}
}
}
}
@@ -1,5 +1,5 @@
{
"$comment": "HHClub 分类名取自 MovieClaw hhanclub.yaml 注释(导航栏分类表);REQ §4.5 要求综艺/体育/短剧保留原始分类。2026-09-29 真实账号核对:列表标题链接里带站点的新种标记「[新]」(详情页标题没有),用 replace 过滤掉;等级「贵宾」为 VIP;访问默认按低频原则收紧(快照只抓第 1 页、健康检测 6 小时、详情缓存 24 小时、搜索并发 1)。",
"$comment": "HHClub 分类名取自 MovieClaw hhanclub.yaml 注释(导航栏分类表);REQ §4.5 要求综艺/体育/短剧保留原始分类。2026-09-29 真实账号核对:列表标题链接里带站点的新种标记「[新]」(详情页标题没有),用 replace 过滤掉;等级「贵宾」为 VIP;访问默认按低频原则收紧(快照只抓第 1 页、健康检测 6 小时、详情缓存 24 小时、搜索并发 1)。 2026-10-02 真实列表页核对:标签在 torrent-title 里的 span.tag(促销是 promotion-tag,不混入)。",
"umt": {
"categoryNames": {
"401": "电影",
@@ -48,6 +48,9 @@
"args": ["(新)", ""]
}
]
},
"labels": {
"selector": "div.torrent-title span.tag"
}
}
}
@@ -0,0 +1,53 @@
{
"$comment": "2026-10-02 真实账号核对列表页 1 次(.local/site-samples/ourbits-torrents.html):标题列嵌套的 table.torrentname 有 5 个 td,MovieClaw 的 td:nth-child(n) 会先命中嵌套格子(大小 0、时间 N/A),改为只匹配行的直接子单元格;副标题在 td.embedded 里标签 div 之后,原定义取到的是标签;标签在 span.tag;列表页有 IMDb / 豆瓣 ID(label.imdb_rate / label.douban_rate 的 data 属性,IMDb 为纯数字,映射时补 tt + 7 位)。",
"torrents": {
"fields": {
"date_elapsed": {
"selector": "> td:nth-child(4)"
},
"date_added": {
"selector": "> td:nth-child(4) > span",
"attribute": "title"
},
"size": {
"selector": "> td:nth-child(5)"
},
"seeders": {
"selector": "> td:nth-child(6)"
},
"leechers": {
"selector": "> td:nth-child(7)"
},
"grabs": {
"selector": "> td:nth-child(8)"
},
"description": {
"selector": "table.torrentname td.embedded",
"remove": "a, b, img, div, br, font"
},
"labels": {
"selector": "span.tag"
},
"imdbid": {
"selector": "label.imdb_rate",
"attribute": "data-imdbid",
"filters": [
{
"name": "re_search",
"args": ["[1-9]\\d*", 0]
}
]
},
"doubanid": {
"selector": "label.douban_rate",
"attribute": "data-doubanid",
"filters": [
{
"name": "re_search",
"args": ["[1-9]\\d*", 0]
}
]
}
}
}
}