一个灵活的 nodejs 爬虫库 —— x-crawl

发布于:2023-03-06 ⋅ 阅读:(744) ⋅ 点赞:(0)

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 。


网站公告

今日签到

点亮在社区的每一天
去签到