前言
今天学习 x-crawl , 颠覆传统爬虫😁
x-crawl库概述
x-crawl是一款基于Node.js的灵活AI辅助爬虫库,由爬虫和AI两部分构成。爬虫部分自带丰富API与功能,即便脱离AI也能正常运作;AI部分依托OpenAI大模型,极大简化复杂操作。
功能特性展示
- 广泛的数据获取能力
支持爬取动态、静态页面,还能获取接口数据与文件数据。例如:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl();
// 爬取动态页面
crawlApp.crawlPage('https://example.com/dynamic_page').then((res) => {
console.log(res.data);
});
// 爬取静态页面
crawlApp.crawlPage('https://example.com/static_page').then((res) => {
console.log(res.data);
});
// 爬取接口数据
crawlApp.crawl('https://api.example.com/data').then((res) => {
console.log(res.data);
});
// 爬取文件数据
crawlApp.crawlFile('https://example.com/file.pdf').then((res) => {
console.log(res.data);
});
- 灵活的配置方式
单个爬取API适配多种配置。如创建爬虫应用时设置参数:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
maxRetry: 5,
intervalTime: { max: 3000, min: 1500 }
});
- 设备指纹与隐私保护
支持设备指纹配置,保障隐私安全:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
fingerprint: {
enabled: true,
customOptions: {
// 自定义配置选项
}
}
});
- 异步同步模式切换
轻松实现异步或同步爬取:
import { createCrawl } from 'x-crawl';
// 异步爬取
const crawlAppAsync = createCrawl();
crawlAppAsync.crawlPage('https://example.com').then((res) => {
console.log(res.data);
});
// 同步爬取
const crawlAppSync = createCrawl({ synchronous: true });
const result = crawlAppSync.crawlPage('https://example.com');
console.log(result.data);
- 间隔爬取与并发控制
可灵活设置间隔爬取策略:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
intervalTime: {
type: 'random',
min: 1000,
max: 5000
},
concurrent: false // 控制是否并发爬取
});
- 失败重试与代理轮换
自定义重试与代理轮换规则:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
maxRetry: 3,
proxy: {
enabled: true,
rotateOnError: {
errorCodes: [403, 429],
maxErrors: 5
}
}
});
- 优先队列运用
根据任务优先级安排爬取顺序:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl();
const task1 = { url: 'https://example.com/task1', priority: 1 };
const task2 = { url: 'https://example.com/task2', priority: 2 };
crawlApp.addToQueue(task1);
crawlApp.addToQueue(task2);
crawlApp.startQueue();
- 爬取信息可视化
终端输出直观信息辅助监控调试:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
logger: {
enabled: true,
level: 'info'
}
});
AI辅助功能解析
- 智能按需分析元素
输入HTML代码与需求,AI自动提取元素信息:
import { createCrawlOpenAI } from 'x-crawl';
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] }
});
const HTMLContent = '<div class="item">Product Name</div>';
crawlOpenAIApp.parseElements(HTMLContent, '获取产品名称').then((res) => {
console.log(res.elements[0].text);
});
- 智能生成元素选择器
告知AI需求,生成合适选择器:
import { createCrawlOpenAI } from 'x-crawl';
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] }
});
const HTMLContent = '<div class="list"><li>Item 1</li><li>Item 2</li></div>';
crawlOpenAIApp.getElementSelectors(HTMLContent, '获取列表项').then((res) => {
console.log(res.selectors);
});
- 智能回复爬虫问题
向AI咨询爬虫相关问题获取专业解答:
import { createCrawlOpenAI } from 'x-crawl';
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] }
});
crawlOpenAIApp.help('如何优化爬虫效率?').then((res) => {
console.log(res);
});
x-crawl库的安装与配置
安装
使用npm包管理器进行安装,在项目目录下的终端中执行以下命令:
npm install x-crawl
配置
- 基本配置
在创建爬虫应用时,可以传入一个配置对象来定制爬虫的行为。例如:
import { createCrawl } from 'x-crawl';
const crawlApp = createCrawl({
// 设置最大重试次数为4次
maxRetry: 4,
// 设置爬取间隔时间,随机在1000毫秒到3000毫秒之间
intervalTime: {
type: 'random',
min: 1000,
max: 3000
},
// 开启设备指纹配置,可根据需要进一步自定义
fingerprint: {
enabled: true
}
});
- AI应用配置
创建AI应用时,需要提供OpenAI的API密钥以及选择使用的模型。假设你已经获取了API密钥并设置在环境变量中:
import { createCrawlOpenAI } from 'x-crawl';
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: {
apiKey: process.env['OPENAI_API_KEY']
},
defaultModel: {
chatModel: 'gpt-4-turbo-preview'
}
});
使用示例
获取电商网站商品数据
- 创建爬虫与AI应用(已配置):
import { createCrawl, createCrawlOpenAI } from 'x-crawl';
const crawlApp = createCrawl({
maxRetry: 3,
intervalTime: { max: 2500, min: 1500 }
});
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] },
defaultModel: { chatModel: 'gpt-4-turbo-preview' }
});
- 爬取页面并获取商品列表HTML:
crawlApp.crawlPage('https://example.com/products').then(async (res) => {
const { page, browser } = res.data;
await page.waitForSelector('.product-list');
const productListHTML = await page.$eval('.product-list', (el) => el.innerHTML);
browser.close();
- 让AI分析获取商品名称与价格:
const productData = await crawlOpenAIApp.parseElements(
productListHTML,
'获取商品名称(name)和价格(price)'
);
console.log(productData);
});
获取新闻网站文章信息
- 构建爬虫与AI应用(已配置):
import { createCrawl, createCrawlOpenAI } from 'x-crawl';
const crawlApp = createCrawl();
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions: { apiKey: process.env['OPENAI_API_KEY'] },
defaultModel: { chatModel: 'gpt-4-turbo-preview' }
});
- 爬取新闻页面并获取文章区域HTML:
crawlApp.crawlPage('https://news.example.com').then(async (res) => {
const { page, browser } = res.data;
await page.waitForSelector('.article-section');
const articleSectionHTML = await page.$eval('.article-section', (el) => el.innerHTML);
browser.close();
- 借助AI提取文章标题、作者与发布时间:
const articleInfo = await crawlOpenAIApp.parseElements(
articleSectionHTML,
'获取文章标题(title)、作者(author)和发布时间(publish_time)'
);
console.log(articleInfo);
});
使用注意事项
AI处理HTML要点
处理复杂网站时,精确描述数据位置,注意Tokens消耗。
合法合规要求
严格遵守目标网站规则,仅用于合法用途。
x-crawl库为Node.js开发者提供了强大的数据爬取方案,凭借丰富功能与AI辅助,在应对网站变化时优势显著。期待其不断发展,为爬虫技术注入更多活力。