解锁Node.js中x-crawl库的强大数据爬取能力

114 阅读4分钟

前言

今天学习 x-crawl , 颠覆传统爬虫😁

x-crawl库概述

x-crawl是一款基于Node.js的灵活AI辅助爬虫库,由爬虫和AI两部分构成。爬虫部分自带丰富API与功能,即便脱离AI也能正常运作;AI部分依托OpenAI大模型,极大简化复杂操作。

功能特性展示

  1. 广泛的数据获取能力
    支持爬取动态、静态页面,还能获取接口数据与文件数据。例如:
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);
});
  1. 灵活的配置方式
    单个爬取API适配多种配置。如创建爬虫应用时设置参数:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  maxRetry: 5,
  intervalTime: { max: 3000, min: 1500 }
});
  1. 设备指纹与隐私保护
    支持设备指纹配置,保障隐私安全:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  fingerprint: {
    enabled: true,
    customOptions: {
      // 自定义配置选项
    }
  }
});
  1. 异步同步模式切换
    轻松实现异步或同步爬取:
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);
  1. 间隔爬取与并发控制
    可灵活设置间隔爬取策略:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  intervalTime: {
    type: 'random',
    min: 1000,
    max: 5000
  },
  concurrent: false // 控制是否并发爬取
});
  1. 失败重试与代理轮换
    自定义重试与代理轮换规则:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  maxRetry: 3,
  proxy: {
    enabled: true,
    rotateOnError: {
      errorCodes: [403, 429],
      maxErrors: 5
    }
  }
});
  1. 优先队列运用
    根据任务优先级安排爬取顺序:
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();
  1. 爬取信息可视化
    终端输出直观信息辅助监控调试:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  logger: {
    enabled: true,
    level: 'info'
  }
});

AI辅助功能解析

  1. 智能按需分析元素
    输入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);
});
  1. 智能生成元素选择器
    告知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);
});
  1. 智能回复爬虫问题
    向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

配置

  1. 基本配置
    在创建爬虫应用时,可以传入一个配置对象来定制爬虫的行为。例如:
import { createCrawl } from 'x-crawl';

const crawlApp = createCrawl({
  // 设置最大重试次数为4maxRetry: 4,
  // 设置爬取间隔时间,随机在1000毫秒到3000毫秒之间
  intervalTime: {
    type: 'random',
    min: 1000,
    max: 3000
  },
  // 开启设备指纹配置,可根据需要进一步自定义
  fingerprint: {
    enabled: true
  }
});
  1. 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'
  }
});

使用示例

获取电商网站商品数据

  1. 创建爬虫与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' }
});
  1. 爬取页面并获取商品列表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();
  1. 让AI分析获取商品名称与价格:
  const productData = await crawlOpenAIApp.parseElements(
    productListHTML,
    '获取商品名称(name)和价格(price)'
  );
  console.log(productData);
});

获取新闻网站文章信息

  1. 构建爬虫与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' }
});
  1. 爬取新闻页面并获取文章区域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();
  1. 借助AI提取文章标题、作者与发布时间:
  const articleInfo = await crawlOpenAIApp.parseElements(
    articleSectionHTML,
    '获取文章标题(title)、作者(author)和发布时间(publish_time)'
  );
  console.log(articleInfo);
});

使用注意事项

AI处理HTML要点

处理复杂网站时,精确描述数据位置,注意Tokens消耗。

合法合规要求

严格遵守目标网站规则,仅用于合法用途。

x-crawl库为Node.js开发者提供了强大的数据爬取方案,凭借丰富功能与AI辅助,在应对网站变化时优势显著。期待其不断发展,为爬虫技术注入更多活力。