拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OpenCLI IMDb 适配器:把电影搜索、Top 250 榜单与用户评论变成可脚本化的 CLI 数据源

OpenCLI IMDb 适配器把电影搜索、Top 250 榜单与用户评论变成可脚本化的 CLI 数据源【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLIOpenCLI 的 IMDb 适配器基于公共页面无需登录实现通过 Browser Bridge 浏览器扩展在 Chrome 中打开www.imdb.com页面并解析其中的结构化数据最终把搜索结果、影片/剧集详情、Top 250 榜单、热门榜、人物资料和用户评论输出为表格或 JSON。读完本文你可以直接复用clis/imdb/下的完整命令用法并理解它JSON-LD 优先、__NEXT_DATA__次之、DOM 兜底的三层解析策略以及 ID 归一化、反爬检测、防重定向校验等可靠性设计的源码实现。适配范围与运行模式IMDb 适配器的全部命令均为只读access: read以Strategy.PUBLIC公共策略运行数据全部来自公开页面不需要 IMDb 账号登录命令功能数据页opencli imdb search搜索电影、剧集与人物/find/?q...opencli imdb title影片/剧集详情/title/tt.../opencli imdb topIMDb Top 250 电影榜/chart/top/opencli imdb trendingIMDb 最热门电影MovieMeter/chart/moviemeter/opencli imdb person演员/导演资料与作品列表/name/nm.../opencli imdb reviews影片用户评论/title/tt.../reviews/运行前提Chrome 中已安装并启用 Browser Bridge 扩展OpenCLI 通过它驱动已登录态浏览器会话无需登录 IMDb所有数据均为公开数据由于要真实渲染页面并执行脚本建议保持 Chrome 处于打开状态运行。命令用法以下示例全部继承自官方文档可直接复制执行# 搜索电影/剧集/人物 opencli imdb search inception --limit 10 # 电影详情 opencli imdb title tt1375666 # 剧集详情也接受完整 URL opencli imdb title https://www.imdb.com/title/tt0903747/ # Top 250 电影榜 opencli imdb top --limit 20 # 当前热门电影 opencli imdb trending --limit 10 # 演员/导演资料含作品列表 opencli imdb person nm0634240 --limit 5 # 用户评论 opencli imdb reviews tt1375666 --limit 5 # JSON 输出 opencli imdb top --limit 5 -f json-f json可作用于任意命令便于把结果管道给jq或喂给 Agent 二次处理。参数取值范围以源码为准文档中的--limit在源码里都做了钳位clamp超出范围不会报错而是被收敛到合法边界命令默认值合法范围实现位置search201–50clis/imdb/search.jstop201–250clis/imdb/top.jstrending201–100clis/imdb/trending.jsperson101–30clis/imdb/person.jsreviews101–25clis/imdb/reviews.jsID 输入归一化裸 ID 与 URL 通用title、person、reviews命令的第一个位置参数既可以是裸 ID如tt1375666、nm0634240也可以是完整 URL这一点由 clis/imdb/utils.js 中的normalizeImdbId()保证接受形如tt\d{7,8}/nm\d{7,8}的裸 ID接受桌面端 URLwww.imdb.com/title/tt1375666/、移动端 URLm.imdb.com/...以及带语言前缀/de/title/...、查询参数?ref_...的变体提取失败或前缀不匹配例如拿nm开头的 ID 去查title时抛出带提示信息的ArgumentError而不是静默出错。对应单测 clis/imdb/utils.test.js 覆盖了裸 ID 透传、多种 URL 形态的提取以及非法输入的报错路径expect(normalizeImdbId(https://www.imdb.com/de/title/tt1375666/?ref_nv_sr_srsg_0, tt)) .toBe(tt1375666); expect(() normalizeImdbId(nm0634240, tt)).toThrow(Invalid IMDb ID);三层数据解析策略JSON-LD 优先、Next.js 载荷次之、DOM 兜底IMDb 页面同时嵌入了多种机器可读数据适配器的解析顺序按稳定性从高到低排列1. JSON-LD 结构化数据top/trending/title的主力来源榜单页与影片详情页在script typeapplication/ldjson中嵌入了 Schema.org 结构化数据。clis/imdb/utils.js 的extractJsonLd()会遍历页面上所有 JSON-LD 脚本块按type白名单精确匹配目标对象并支持递归进入graph数组查找。top/trending提取type: ItemList块直接得到包含全部榜单条目的itemListElement数组。clis/imdb/top.js 与 clis/imdb/trending.js 的逻辑一致区别只在目标页面/chart/top/对比/chart/moviemeter/和输出列top多一列votes评分人数。两个命令都会把 JSON-LD 中的相对 URL 补全为https://www.imdb.com绝对地址。title按类型白名单[Movie, TVSeries, TVEpisode, TVMiniseries, TVMovie, TVSpecial, VideoGame, ShortFilm]取出影片对象clis/imdb/title.js。随后映射为field/value两行式输出title、type、year、rating、votes、genre、director剧集则为creator主创、cast取前 5 位演员、duration、contentRating、plot、url剧集还会额外输出seasons与episodes。这里有两个值得注意的细节时长格式化JSON-LD 的duration是 ISO 8601 格式如PT2H28MformatDuration()会把它转成2h 28m的可读形式非法输入返回空字符串见 clis/imdb/utils.test.js年份逻辑剧集取startDate/endDate在播剧集输出为2024-无结束年份完结剧集输出为2010-2015clis/imdb/title.js。2.__NEXT_DATA__search与person的主力来源IMDb 是 Next.js 应用页面内嵌__NEXT_DATA__JSON 保存了完整的pageProps。search的解析分两步clis/imdb/search.js先解析pageProps.titleResults.results影片与pageProps.nameResults.results人物IMDb 把每条结果包装为{index: tt..., listItem: {...}}结构其中index即 ID若该载荷缺失或为空再退化为 DOM 选择器方案——抓取[class*find-title-result]、[class*find-name-result]等元素从a[href*/title/], a[href*/name/]链接中正则提取(tt|nm)\d{7,8}。人物条目的type列会填入其主要职业如Actor影片条目的type则经normalizeImdbTitleType()统一为Movie、TV Series等可读标签内部 idtvSeries会被映射为TV Series见 clis/imdb/utils.test.js。person同样优先读__NEXT_DATA__从pageProps.aboveTheFold取姓名与出生日期birthDate.dateComponents会拼成年-月-日从mainColumnData的knownForFeatureV2.credits取代表作如果该区块为空再回退到released.edges/groupings.edges两条作品分组路径内部硬上限 30 条--limit最大也正是 30。最终作品列表以片名 (年份) [角色]的形式追加在field/value行之后clis/imdb/person.js。人物基础信息姓名、简介则优先来自type: Person的 JSON-LD 块。3. DOM 兜底与评论专用选择器reviews命令只解析首屏评论页的 DOM 卡片clis/imdb/reviews.js容器选择器同时兼容新旧两套渲染结构article.user-review-item、[data-testidreview-card-parent]、.imdb-user-review等提取标题、评分、作者、日期与正文。两个防御性细节去重IMDb 会把每条评论渲染成预览 展开两份 DOM解析器按标题比对跳过重复项截断正文压缩空白后截取前 200 字符避免表格输出被长评刷屏。可靠性设计等待、反爬检测与重定向校验浏览器端页面的不确定性由 clis/imdb/utils.js 中的四个辅助函数统一治理所有命令共享这套模式路径轮询waitForImdbPath()在页面内每 250ms 检查一次location.pathname是否匹配预期路径如^/title/tt1375666/默认超时 15 秒。用于确认导航确实落到了目标实体页内容就绪等待waitForImdbSearchReady()等待搜索结果__NEXT_DATA__中有titleResults/nameResults或 DOM 出现/title/、/name/链接或页面明确提示 No results foundwaitForImdbReviewsReady()等待评论卡片或 No user reviews 提示渲染完成机器人验证检测isChallengePage()通过标题Robot Check、Are you a robot、JavaScript is disabled与正文关键字captcha、verify that you are human识别 IMDb 的风控拦截页一旦命中立即抛出CommandExecutionError提示改用常规浏览器会话重试而不是输出半截脏数据重定向校验getCurrentImdbId()从 URL、link[relcanonical]与og:url三个候选源读取当前页面真实实体 ID若与请求的 ID 不一致例如 IMDb 把旧 ID 重定向到了新实体直接报错说明页面重定向到了另一个实体见 clis/imdb/title.js。另外所有命令在发起导航前都会经过forceEnglishUrl()给 URL 强制加上languageen-US参数保留已有查询参数把多语言本地化页面拉回到统一的英文结构上减少解析分支。故障排查速查现象原因源码依据处理建议IMDb blocked this request命中isChallengePage()风控检测换用正常登录态的浏览器会话或扩展模式重试Title page did not finish loading/did not finish loadingwaitForImdbPath()15 秒内未落到目标路径重试持续出现说明页面导航流程可能已变化Invalid IMDb IDnormalizeImdbId()校验失败位数、前缀不匹配确认 ID 形如tt1375666/nm0634240IMDb redirected to a different title/person页面 canonical 指向了不同实体以返回的新 ID 为准重新查询Could not find chart data on page榜单页ItemListJSON-LD 缺失IMDb 页面结构可能变更重试或检查站点小结IMDb 适配器是 OpenCLI 把公开网站变成 CLI思路的一个典型样本它不依赖任何私有 API而是系统性地利用页面自带的 JSON-LD、__NEXT_DATA__与 DOM 三层数据源叠加 ID 归一化、英文强制、路径轮询、风控识别与重定向校验把 IMDb 六个高频只读场景收敛成了参数钳位明确、错误信息可操作的一组成熟命令。适合作为研究如何为动态渲染站点编写稳健数据抓取适配器的参考实现。主要参考文件docs/adapters/browser/imdb.md、clis/imdb/utils.js、clis/imdb/search.js、clis/imdb/title.js、clis/imdb/top.js、clis/imdb/trending.js、clis/imdb/person.js、clis/imdb/reviews.js、clis/imdb/utils.test.js。【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门