x-crawl 项目介绍
项目概述
x-crawl 是一个灵活的 Node.js AI 辅助爬虫库,其设计旨在使爬虫工作变得更加高效、智能和便捷。x-crawl 由两个主要部分组成:爬虫组件和 AI 组件。其中,爬虫组件提供基础的爬虫 API 和各类功能,而无需依赖 AI 便可以正常运行。AI 组件则基于 OpenAI 提供的大型 AI 模型,简化了许多繁琐的操作。
如果您发现 x-crawl 对您有帮助,欢迎在其 GitHub 仓库给与支持,这将是我们持续改进的动力!
功能特色
- 🤖 AI 辅助:强大的 AI 辅助功能使得爬虫工作更为高效智能。
- 🖋️ 灵活编写:单一爬虫 API 适用于多种配置方式,可根据需要选择合适的配置方法。
- ⚙️ 多样用途:支持爬取动态页面、静态页面、接口数据和文件数据。
- ⚒️ 控制页面:支持自动化操作、键盘输入和事件操作的动态页面爬取。
- 👀 设备指纹隐藏:提供零配置或自定义配置,避免被指纹识别和跟踪。
- 🔥 异步同步:支持异步或同步爬取模式,无需切换爬虫 API 。
- ⏱️ 间隔爬取:支持无间隔、固定间隔和随机间隔,决定是否进行高并发爬取。
- 🔄 失败重试:自定义重试次数以避免因暂时性问题导致的爬取失败。
- ➡️ 代理轮换:结合重试失败后的自动代理轮换,自定义错误次数和 HTTP 状态码。
- 🚀 优先队列:根据单个爬取目标的优先级,可优先于其他目标进行爬取。
- 🧾 爬取信息:可控的爬取信息,终端中将输出带颜色的字符串信息。
- 🦾 TypeScript:提供自身类型并通过泛型实现完整类型支持。
AI 辅助爬虫的重要性
随着网络技术的快速发展,网站更新频率加快,导致类名或结构的变化,这给传统的爬虫策略带来了挑战。传统爬虫依赖固定的类名或结构,遇到变化后可能无法准确获取数据。
然而,结合 AI 技术的爬虫能够更好应对这种变化。AI 通过自然语言处理等技术解析网页的语义信息,更准确地提取所需数据。
实例演示
以下实例展示了如何结合爬虫与 AI,根据指令获取高评分度假屋的图片:
import { createCrawl, createCrawlOpenAI } from 'x-crawl'
// 创建爬虫应用
const crawlApp = createCrawl({
maxRetry: 3,
intervalTime: { max: 2000, min: 1000 }
})
// 创建 AI 应用
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] },
defaultModel: { chatModel: 'gpt-4-turbo-preview' }
})
// 爬取页面
crawlApp.crawlPage('https://www.airbnb.cn/s/select_homes').then(async (res) => {
const { page, browser } = res.data
// 等待目标元素出现并获取 HTML
const targetSelector = '[data-tracking-id="TOP_REVIEWED_LISTINGS"]'
await page.waitForSelector(targetSelector)
const highlyHTML = await page.$eval(targetSelector, (el) => el.innerHTML)
// 使用 AI 获取图片链接并去重复
const srcResult = await crawlOpenAIApp.parseElements(
highlyHTML,
`Get the image link, don't source it inside, and de-duplicate it`
)
browser.close()
// 爬取文件资源
crawlApp.crawlFile({
targets: srcResult.elements.map((item) => item.src),
storeDirs: './upload'
})
})
在网站内容复杂的情况下,尽可能详细描述需要获取的元素位置,可以将整个 HTML 发给 AI 帮助操作。即使网站后续更新导致类名或结构变化,AI 仍能高效准确提取数据。
赞助商
项目获得以下企业的赞助: