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

x-crawl

x-crawl 是一个灵活的 Node.js 多功能爬虫库。用于爬页面、爬接口、爬文件以及轮询爬。

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

特征

  • 异步/同步 - 只需更改一下 mode 属性即可切换 异步/同步 爬取模式。
  • ⚙️ 多种功能 - 可爬页面、爬接口、爬文件以及轮询爬。并且支持爬取单个或多个。
  • ️ 写法灵活 - 一种功能适配多种爬取配置、获取爬取结果的写法,写法非常灵活。
  • ⏱️ 间隔爬取 - 无间隔/固定间隔/随机间隔,可以有效 使用/避免 高并发爬取。
  • 失败重试 - 可针对所有爬取的请求设置,针对单次爬取的请求设置,针对单个请求设置进行失败重试。
  • 优先队列 - 根据单个请求的优先级使用优先爬取。
  • ☁️ 爬取 SPA - 批量爬取 SPA(单页应用程序)生成预渲染内容(即“SSR”(服务器端渲染))。
  • ⚒️ 控制页面 - 无头浏览器可以表单提交、键盘输入、事件操作、生成页面的屏幕截图等。
  • 捕获记录 - 对爬取的结果进行捕获记录,并在控制台进行高亮的提醒。
  • TypeScript - 拥有类型,通过泛型实现完整的类型。

示例

每天自动获取 bilibili 首页、国漫、电影这三个页面的轮播图片为例:

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

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

// 3.设置爬取任务
// 调用 startPolling API 开始轮询功能,每隔一天会调用回调函数
myXCrawl.startPolling({ d: 1 }, async (count, stopPolling) => {
  // 调用 crawlPage API 爬取 首页、国漫、电影 这三个页面
  const res = await myXCrawl.crawlPage([
    'https://www.bilibili.com',
    'https://www.bilibili.com/guochuang',
    'https://www.bilibili.com/movie'
  ])

  // 存放图片 URL
  const imgUrls = []
  const elSelectorMap = ['.carousel-inner img', '.chief-recom-item img', '.bg-item img']
  for (const item of res) {
    const { id } = item
    const { page } = item.data

    // 获取页面轮播图片元素的 URL
    const urls = await page.$$eval(elSelectorMap[id - 1], (imgEls) =>
      imgEls.map((item) => item.src)
    )
    imgUrls.push(...urls)

    // 关闭页面
    page.close()
  }

  // 调用 crawlFile API 爬取图片
  await myXCrawl.crawlFile({
    requestConfigs: imgUrls,
    fileConfig: { storeDir: './upload' }
  })
})

运行效果:

一个灵活的 Node.js 多功能爬虫库 —— x-crawl_第1张图片

一个灵活的 Node.js 多功能爬虫库 —— x-crawl_第2张图片

注意: 请勿随意爬取,爬取前可查看 robots.txt 协议。这里只是为了演示如何使用 x-crawl 。

更多

更详细的文档请查看:https://github.com/coder-hxl/x-crawl

你可能感兴趣的:(一个灵活的 Node.js 多功能爬虫库 —— x-crawl)