大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 x-crawlx-crawl is a flexible Node.js AI-assisted crawler library. Flexible usage and powerful AI assistance functions make crawler work more efficient, intelligent and convenient.
x-crawl 是一个灵活的 Node.js AI 爬虫库,凭借灵活的使用方式和强大的 AI 辅助功能,让爬虫工作更加高效、智能、便捷。x-crawl 由两部分组成:
爬虫:由爬虫 API 和各种功能组成,即使不依赖 AI 也能正常工作。AI:目前基于 OpenAI 提供的大型 AI 模型,简化了很多繁琐的操作x-crawl 的典型特征包括:
AI 辅助:强大的 AI 辅助功能,让爬虫工作更加高效、智能、便捷。和传统爬虫相比更加轻松应对网站的变更,通过自然语言处理等技术来理解和解析网页的语义信息,更准确地提取所需的数据。️编写灵活:单个爬取 API 适合多种配置,每种配置方式都有优点⚙️一机多用:支持爬取动态页面、静态页面、界面数据和文件数据⚒️控制页面:爬取动态页面支持自动化操作、键盘输入、事件操作等设备指纹识别:零配置或自定义配置,以避免指纹识别从不同位置识别和跟踪同时支持异步同步:异步或同步抓取模式,无需切换抓取 API⏱️支持间隔爬取:无间隔、固定间隔和随机间隔,判断是否高并发爬取失败重试:自定义重试次数,避免因临时问题导致抓取失败支持轮换代理:自动代理轮换,包括:失败重试、自定义错误时间和 HTTP 状态代码优先级队列:基于单个抓取目标的优先级,可以先于其他目标抓取爬取信息:可控的爬取信息,会在终端输出彩色字符串信息支持 TypeScript:拥有类型并通过泛型实现完整类型目前 x-crawl 在 Github 通过 MIT 协议开源,有超过 1.2k 的 star,是一个值得关注的前端开源项目。
如何使用 x-crawl首先需要安装相应依赖:
$ npm install x-crawl// yarn$ yarn add x-crawl// pnpm$ pnpm add x-crawl// 需要注意的是:x-crawl 需要 Node.js 版本 18+下面示例是爬虫和 AI 的结合,让爬虫和 AI 根据用户指令获取高评分度假屋的图片:
import {createCrawl, createCrawlOpenAI} from 'x-crawl'// 第一步:创建爬虫应用const crawlApp = createCrawl({ maxRetry: 3, // 最大重试3次 intervalTime: {max: 2000, min: 1000}})// 第二步:创建 AI 应用const crawlOpenAIApp = createCrawlOpenAI({ clientOptions: {apiKey: process.env['OPENAI_API_KEY'] }, defaultModel: {chatModel: 'gpt-4-turbo-preview'}})// 第三步:crawlPage 方法用于爬取网页内容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() // crawlFile 用于爬取文件资源 crawlApp.crawlFile({ targets: srcResult.elements.map((item) => item.src), storeDirs: './upload' })})crawl 还提供了 crawlData 方法,其用于爬取 API、获取 JSON 数据等:
import {createCrawl} from 'x-crawl'const crawlApp = createCrawl({ timeout: 10000, // 超时10s intervalTime: {max: 2000, min: 1000}})// crawlData API 用于抓取API数据crawlApp .crawlData({ targets: ['https://www.example.com/api-1', 'https://www.example.com/api-2'], intervalTime: {max: 3000, min: 1000}, cookies: 'xxx', maxRetry: 1 }) .then((res) => { console.log(res) })同时为了应对复杂的网络环境,x-crawer 还支持配置代理,比如下面的示例:
import { createCrawl } from 'x-crawl'const crawlApp = createCrawl()crawlApp .crawlPage({ url: 'https://www.example.com', maxRetry: 10, proxy: { // 代理 urls: [ 'https://www.example.com/proxy-1', 'https://www.example.com/proxy-2' ], switchByHttpStatus: [401, 403], switchByErrorCount: 3 } }) .then((res) => {})更多关于 x-crawl 的用例可以参考文末资料,本文不再过多展开。
参考资料https://github.com/coder-hxl/x-crawl
https://coder-hxl.github.io/x-crawl/
https://medium.com/@jamesryebread/building-the-ultimate-web-scraper-with-ai-385edf0c01a9
https://medium.com/@tushar_rs_/dark-web-scraping-by-osint-scraping-tools-5e148e4eea0