x-crawl 快速指南:用自然语言替代写死的 CSS 选择器,5 分钟跑通第一个采集任务
x-crawl 快速指南用自然语言替代写死的 CSS 选择器5 分钟跑通第一个采集任务【免费下载链接】x-crawlFlexible Node.js AI-assisted crawler library项目地址: https://gitcode.com/gh_mirrors/xc/x-crawl上周四你要上线一个竞品监控脚本站点悄悄改版前一天还生效的一二十个 CSS 选择器集体失效——这大概是维护爬虫最耗人的时刻。x-crawl 是一个灵活的 Node.js AI 辅助爬虫库爬取部分不依赖 AI 也能独立工作AI 部分则让你用一句话描述需要的数据由模型从 HTML 中定位元素。适合需要采集动态页面、接口数据或图片又不想长期维护选择器的开发者。选择器寿命问题x-crawl 值得试的原因传统做法的代价藏在维护里每想采集一个字段就要在 DOM 里找一个稳定的选择器再单独写解析代码站点框架会给 class 名做混淆官方示例的页面里满是 c1yo0219 这类命名一次改版就全部作废你得重新翻 DOM 找新名字。x-crawl 的解法是把找数据从手写代码挪到模型侧AI 应用实例提供parseElements方法传入 HTML 片段和一句需求描述它返回元素列表。你写的是数据的含义而不是数据的位置。收益可以验证面对 class 名混淆的页面你不用翻 DOM 找稳定选择器站点再改版时多数情况下只需调整那句话而不是逐字段修选择器。维度传统选择器写法x-crawl AI 提取提取逻辑逐字段找选择器并分别解析一句自然语言描述应对 class 变更改版后脚本失效逐个重选不依赖固定 class改描述即可上手成本需要读懂目标页 DOM 结构只需说清想要什么核心能力拆解AI 元素提取与反封禁的三块拼图parseElements 用法让 AI 做 HTML 元素提取AI 应用实例上的一个方法传入 HTML 和一句自然语言需求返回匹配的元素列表。它解决的具体麻烦想拿图片链接这类字段传统做法要把选择器写死结构一变就得重写。关键实现思路通过createCrawlOpenAI/createCrawlOllama分别接入 OpenAI 或本地 Ollama把 HTML 交给大模型做语义解析返回的 elements 可以直接转成 URL 数组传给crawlFile批量落盘。效果与边界对结构常变的页面多数情况能直接出结果但 HTML 越大 token 越多官方 README 也建议只传目标容器的 HTML。crawlPage、crawlData、crawlFile 配置一套 API 覆盖页面、接口与文件crawlPage动态页面、crawlHTML静态页面、crawlDataJSON 接口、crawlFile图片/PDF四个方法成体系且都支持从一个 URL 字符串到进阶配置的同一套四级写法。它解决的具体麻烦传统项目里不同目标类型常要换不同库重试、间隔、代理都要自己造轮子。关键实现思路内部封装 puppeteer动态页与 HTTP 请求数据、文件targets 参数支持混合数组——统一默认配置单个目标可单独覆盖。效果与边界无头浏览器开销不小纯接口数据建议直接走crawlData文件下载传storeDirs即可批量落盘。反封禁配置设备指纹、轮换代理与失败重试三组可叠加的设置enableRandomFingerprint随机设备指纹、轮换代理、maxRetry失败重试。它解决的具体麻烦同一 IP 与 UA 短时间高频请求容易被限流或拦截。关键实现思路指纹随机生成 UA 与平台组合代理按switchByErrorCount错误次数或switchByHttpStatus状态码如 401/403自动切换重试会等当前一轮目标跑完再补发。效果与边界批量采集场景价值最大低频单次请求用默认配置即可。 5 分钟快速上手从安装到跑通第一个采集任务第 1 步安装npm install x-crawl这一步在做什么从 npm 安装 x-crawl要求 Node 18想读源码和完整示例可克隆仓库git clone https://gitcode.com/gh_mirrors/xc/x-crawl。第 2 步跑通第一次爬取import { createCrawl } from x-crawl const crawlApp createCrawl() crawlApp .crawlPage(https://www.example.com) .then((res) { console.log(res.data) res.data.browser.close() })这一步在做什么启动浏览器打开目标页res.data里拿到 page 与 browser 对象用完记得browser.close()释放进程。第 3 步接上 AI 解析import { createCrawlOpenAI } from x-crawl const aiApp createCrawlOpenAI({ clientOptions: { apiKey: process.env[OPENAI_API_KEY] } }) const res await aiApp.parseElements(html, 获取图片链接, 并去重)这一步在做什么AI 应用连上 OpenAI本地运行就换createCrawlOllama把 HTML 和一句话交给parseElements拿回结构化元素。第 4 步批量落盘文件await crawlApp.crawlFile({ targets: res.elements.map((item) item.src), storeDirs: ./upload })这一步在做什么crawlFile把所有图片 URL 依次下载到./upload目录并返回下载结果。图上面 4 步串起来运行浏览器打开页面AI 提取图片链接crawlFile 依次落盘两个真实落地案例房源图片采集与多接口监控案例一批量采集高评分度假屋的房源图片业务目标从度假屋列表页把高评分板块的房源图片批量保存到本地。实现思路crawlPage打开页面 → 等待列表容器加载完成 → 把容器 HTML 交给parseElements拿出去重后的图片链接 →crawlFile落盘。关键代码import { createCrawl, createCrawlOpenAI } from x-crawl const crawlApp createCrawl({ maxRetry: 3, intervalTime: { max: 2000, min: 1000 } }) const aiApp createCrawlOpenAI({ clientOptions: { apiKey: process.env[OPENAI_API_KEY] } }) crawlApp .crawlPage(https://www.example.cn/s/select_homes) .then(async (res) { const { page, browser } res.data const sel [data-tracking-idTOP_REVIEWED_LISTINGS] await page.waitForSelector(sel) const html await page.$eval(sel, (el) el.innerHTML) const src await aiApp.parseElements(html, 获取图片链接, 不要source里面的, 并去重) browser.close() return crawlApp.crawlFile({ targets: src.elements.map((item) item.src), storeDirs: ./upload }) })图上面代码的运行结果高评分列表的房源图片被批量下载到本地踩坑提示waitForSelector之前不要急着取 HTML动态列表可能还没加载完用完记得browser.close()AI 提示词描述越详细越好只说图片链接不如说清不要 source 里面的、并去重。案例二用优先队列监控多个接口业务目标同时采多个数据源时重要接口先跑。实现思路crawlData的目标配置里传priority值越大越优先。关键代码crawlApp .crawlData([ { url: https://www.example.com/api-1, priority: 1 }, { url: https://www.example.com/api-2, priority: 10 }, { url: https://www.example.com/api-3, priority: 8 } ]) .then((res) {})踩坑提示intervalTime默认是 undefined不间隔多目标会同时发出生产环境建议显式配一个随机间隔。进阶与避坑三档可直接套用的配置入门公开数据、低频createCrawl()零参数即可纯接口用crawlData直接拿 JSON不启动浏览器路径最短。进阶动态页面、批量createCrawl({ intervalTime: { max: 2000, min: 1000 }, maxRetry: 3 })目标之间随机间隔 1~2 秒失败最多补发 3 次。高压同站批量采集轮换代理与重试叠加注意maxRetry必须大于该目标所有代理的switchByErrorCount总和crawlApp.crawlPage({ targets: [...], maxRetry: 10, proxy: { urls: [proxy-1, proxy-2], switchByErrorCount: 3, switchByHttpStatus: [401, 403] } })常见问题AI 慢、token 贵只传目标容器的 HTML 而不是整页不想花 API 费用就换createCrawlOllama本地跑模型。常见问题某个目标要关掉指纹或代理在详细目标配置里传fingerprint: null/proxy: null完整选项见 设备指纹 与 轮换代理。跑完上面 4 步多数单页采集需求就够用了全部配置项见仓库 docs/cn/guide/ 目录入口是 快速上手。使用 x-crawl 时请遵守目标网站的 robots.txt 与服务条款控制请求频率只采集你有权获取的数据。【免费下载链接】x-crawlFlexible Node.js AI-assisted crawler library项目地址: https://gitcode.com/gh_mirrors/xc/x-crawl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考