一个灵活的 Node.js 多功能爬虫库 —— x-crawl(Nodejs)

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

x-crawl · npm NPM Downloads GitHub license

x-crawl 是一个灵活的 Node.js 多功能爬虫库。灵活的使用方式和众多的功能可以帮助您快速、安全、稳定地爬取页面、接口以及文件。

如果你也喜欢 x-crawl ,可以在 GitHub 给 x-crawl 存储库 点个 star 支持一下,感谢大家的支持!

特征

  • 🔥 异步同步 - 只需更改一下 mode 属性即可切换异步或同步爬取模式。
  • ⚙️ 多种用途 - 支持爬动态页面、静态页面、接口数据、文件以及轮询操作。
  • ⚒️ 控制页面 - 爬取动态页面支持自动化操作、键盘输入、事件操作等。
  • 🖋️ 写法灵活 - 同种爬取 API 适配多种配置,每种配置方式都非常独特。
  • ⏱️ 间隔爬取 - 无间隔、固定间隔以及随机间隔,产生或避免高并发爬取。
  • 🔄 失败重试 - 避免因短暂的问题而造成爬取失败,自定义重试次数。
  • ➡️ 轮换代理 - 配合失败重试,自定义错误次数以及 HTTP 状态码自动轮换代理。
  • 👀 设备指纹 - 零配置或自定义配置,避免指纹识别从不同位置识别并跟踪我们。
  • 🚀 优先队列 - 根据单个爬取目标的优先级可以优先于其他目标提前爬取。
  • 🧾 爬取记录 - 对爬取进行记录,并在终端使用彩色字符串提醒。
  • 🦾 TypeScript - 拥有类型,通过泛型实现完整的类型。

示例

以每天自动获取世界各地的经历和房间的一些照片为例:

// 1.导入模块 ES/CJS
import xCrawl from 'x-crawl'

// 2.创建一个爬虫实例 const myXCrawl = xCrawl({ maxRetry: 3, intervalTime: { max: 2000, min: 1000 } })

// 3.设置爬取任务 // 调用 startPolling API 开始轮询功能,每隔一天会调用回调函数 myXCrawl.startPolling({ d: 1 }, async (count, stopPolling) => { // 调用 crawlPage API 来爬取页面 const pageResults = await myXCrawl.crawlPage({ targets: [ ‘https://www.airbnb.cn/s/*/experiences’, ‘https://www.airbnb.cn/s/plus_homes’ ], viewport: { width: 1920, height: 1080 } })

// 通过遍历爬取页面结果获取图片 URL const imgUrls = [] for (const item of pageResults) { const { id } = item const { page } = item.data const elSelector = id === 1 ? ‘.i9cqrtb’ : ‘.c4mnd7m’

// 等待页面元素出现
await page.waitForSelector(elSelector)

// 获取页面图片的 URL
const urls = await page.$$eval(`${elSelector} picture img`, (imgEls) =>
  imgEls.map((item) => item.src)
)
imgUrls.push(...urls.slice(0, 6))

// 关闭页面
page.close()

}

// 调用 crawlFile API 爬取图片 await myXCrawl.crawlFile({ targets: imgUrls, storeDirs: ‘./upload’ }) })

运行效果:

注意: 请勿随意爬取,爬取前可查看 robots.txt 协议。网站的类名可能会有变更,这里只是为了演示如何使用 x-crawl 。

更多

更多内容可查看:https://github.com/coder-hxl/x-crawl


一个灵活的 Node.js 多功能爬虫库 —— x-crawl(Nodejs)

13 回复

快来体验一下吧


可以做自动化操作

点个 star 先

感谢您的支持

正好最近有需求,有时间拿来试试,已 star

感谢您的支持❤️

感谢您的支持❤️,使用过程中遇到的问题都可以在 GitHub Issues 中提 Issues ,我会尽快解决。

是对 puppeteer 的包装?为啥不用 playwright 呢。。

crawlPage API 是用的 puppeteer ,puppeteer 使用者更多些。两者用法上很相似,后续也可以写个新的 API 加上 playwright 。

crawlPage API 是用的 puppeteer ,puppeteer 使用者更多些。两者用法上很相似,后续也可以写个新的 API 加上 playwright 。

x-crawl 是一个功能强大的 Node.js 爬虫库,它提供了灵活且高效的网页抓取能力。下面我将简要介绍 x-crawl 的一些核心特性,并通过代码示例展示其使用方法。

x-crawl 支持多种请求方式,如 GET、POST,并且允许自定义请求头和请求体。它还具备强大的解析能力,可以使用 XPath、CSS 选择器或者正则表达式来提取网页内容。

以下是一个简单的使用 x-crawl 的示例代码:

const xCrawl = require('x-crawl');

// 创建一个爬虫实例
const crawler = new xCrawl({
    url: 'https://example.com',
    method: 'GET',
    headers: {
        'User-Agent': 'x-crawl'
    }
});

// 抓取网页内容并进行解析
crawler.start()
    .then(response => {
        // 使用 XPath 提取标题
        const title = response.$('//title').text();
        console.log('Title:', title);

        // 使用 CSS 选择器提取所有链接
        const links = response.$('a').map(el => el.attr('href')).get();
        console.log('Links:', links);
    })
    .catch(error => {
        console.error('Error:', error);
    });

在这个示例中,我们首先引入了 x-crawl 库,并创建了一个爬虫实例。然后,我们指定了要抓取的 URL、请求方法和请求头。在 start 方法中,我们获取了响应内容,并使用 XPath 和 CSS 选择器提取了网页的标题和所有链接。

x-crawl 还支持更多的高级功能,如自动处理分页、处理 cookies、模拟用户登录等,可以满足各种复杂的爬虫需求。如果你对爬虫开发感兴趣,不妨试试 x-crawl,相信它会给你带来意想不到的便利。

回到顶部