x-crawl
x-crawl 是一个灵便的 nodejs 爬虫库。
如果对您有帮忙,能够给 x-crawl 存储库 点个 Star 反对一下。
特色
- 只需简略的配置即可抓取页面、JSON、文件资源等等。
- 内置 puppeteer 爬取页面,并用采纳 jsdom 库对页面解析。
- 反对 异步 / 同步 形式爬取数据。
- 反对 Promise/Callback 形式获取后果。
- 轮询性能,定时爬取。
- 拟人化的申请间隔时间。
- 应用 TypeScript 编写,领有的类型提醒,提供泛型。
跟 puppeteer 的关系
crawlPage API 外部应用 puppeteer 库来帮忙咱们爬取页面。
咱们能够做以下操作:
- 生成页面的屏幕截图和 PDF。
- 抓取 SPA(单页应用程序)并生成预渲染内容(即“SSR”(服务器端渲染))。
- 自动化表单提交、UI 测试、键盘输入等。
示例
定时爬取: 每隔一天就获取 bilibili 国漫主页的轮播图片为例:
// 1. 导入模块 ES/CJS
import path from 'node:path'
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 { browser, 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: path.resolve(__dirname, './upload') }
})
// 敞开浏览器
browser.close()})
})
运行成果:
留神: 请勿随便爬取,爬取前可查看 robots.txt 协定。这里只是为了演示如何应用 x-crawl。