乐趣区

关于node.js:xcrawl-一个新的-Nodejs-多功能爬虫库

x-crawl

x-crawl 是新的 Nodejs 多功能爬虫库。

特色

  • 只需简略的配置即可抓取页面、JSON、文件资源等等。
  • 内置 puppeteer 爬取页面,并用采纳 jsdom 库对页面解析。
  • 反对 异步 / 同步 形式爬取数据。
  • 反对 Promise/Callback 形式获取后果。
  • 轮询性能,定点爬取。
  • 拟人化的申请间隔时间。
  • 应用 TypeScript 编写,提供泛型。

跟 puppeteer 的关系

fetchPage API 外部应用 puppeteer 库来爬取页面。

能够实现以下操作:

  • 生成页面的屏幕截图和 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}, () => {
  // 调用 fetchPage API 爬取 HTML
  myXCrawl.fetchPage('https://www.bilibili.com/guochuang/').then((res) => {const { jsdom} = res.data // 默认应用了 JSDOM 库解析 HTML

    // 获取轮播图片元素
    const imgEls = jsdom.window.document.querySelectorAll('.carousel-wrapper .chief-recom-item img')

    // 设置申请配置
    const requestConfig = []
    imgEls.forEach((item) => requestConfig.push({url: `https:${item.src}` }))

    // 调用 fetchFile API 爬取图片
    myXCrawl.fetchFile({requestConfig, fileConfig: { storeDir: './upload'} })
  })
})

运行成果:

留神: 请勿随便爬取,这里只是为了演示如何应用 x-crawl,并将申请频率管制在 3000ms 到 2000ms 内。

仓库地址

如果对您有帮忙,请点个 Star 反对一下。

https://github.com/coder-hxl/x-crawl

退出移动版