x-crawl

x-crawl 是一个灵活的 nodejs 爬虫库。可以爬取页面并控制页面、批量网络请求以及批量下载文件资源等操作。支持 异步/同步 模式爬取数据。跑在 nodejs 上,用法灵活和简单,对 JS/TS 开发者友好。
如果感觉不错,可以给 x-crawl 存储库 点个 Star 支持一下,您的 Star 将是我更新的动力。
特征
- 支持 异步/同步 方式爬取数据。
- 写法非常灵活,支持多种方式写请求配置和获取爬取结果。
- 灵活的爬取间隔时间,由你决定 使用/避免 高并发爬取。
- 简单的配置即可抓取页面、批量网络请求以及批量下载文件资源等操作。
- 拥有轮询功能,定时爬取数据。
- 内置 puppeteer 爬取页面,并用采用 jsdom 库对页面内容解析,也支持自行解析。
- 对批量爬取的成功和失败进行捕获记录,并进行高亮的提醒。
- 使用 TypeScript 编写,拥有类型,提供泛型。
跟 puppeteer 的关系
crawlPage API 内部使用 puppeteer 库来帮助我们爬取页面。
crawlPage API 的返回值将可以做以下操作:
- 生成页面的屏幕截图和 PDF。
- 抓取 SPA(单页应用程序)并生成预渲染内容(即“SSR”(服务器端渲染))。
- 自动化表单提交、UI 测试、键盘输入等。
示例
定时爬取: 每隔一天就获取 bilibili 国漫主页的轮播图片为例:
// 1.导入模块 ES/CJS
import xCrawl from 'x-crawl'
// 2.创建一个爬虫实例
const myXCrawl = xCrawl({
timeout: 10000, // 请求超时时间
intervalTime: { max: 3000, min: 2000 } // 爬取间隔时间
})
// 3.设置爬取任务
// 调用 startPolling API 开始轮询功能,每隔一天会调用回调函数
myXCrawl.startPolling({ d: 1 }, () => {
// 调用 crawlPage API 爬取 Page
myXCrawl.crawlPage('https://www.bilibili.com/guochuang/').then((res) => {
const { jsdom } = res // 默认使用了 JSDOM 库解析 Page
// 获取轮播图片元素
const imgEls = jsdom.window.document.querySelectorAll('.chief-recom-item img')
// 设置请求配置
const requestConfig = []
imgEls.forEach((item) => requestConfig.push(`https:${item.src}`))
// 调用 crawlFile API 爬取图片
myXCrawl.crawlFile({ requestConfig, fileConfig: { storeDir: './upload' } })
})
})
运行效果:
注意: 请勿随意爬取,爬取前可查看 robots.txt 协议。这里只是为了演示如何使用 x-crawl 。