乐趣区

关于爬虫:一个灵活的-nodejs-爬虫库-xcrawl

x-crawl

x-crawl 是一个灵便的 nodejs 爬虫库。可批量爬取页面、批量网络申请、批量下载文件资源、轮询爬取等。用法灵便和简略,对 JS/TS 开发者敌对。

如果你喜爱 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'}
  })
})

运行成果:

留神: 请勿随便爬取,爬取前可查看 robots.txt 协定。这里只是为了演示如何应用 x-crawl。

更多

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

退出移动版