NodeJs爬虫框架Spider基础使用教程

 更新时间:2023年07月24日 09:13:48   作者:GeoffZhu  
这篇文章主要为大家介绍了NodeJs爬虫框架Spider基础使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

gz-spider

一个基于Puppeteer和Axios的NodeJs爬虫框架 源码仓库

为什么需要爬虫框架

爬虫框架可以简化开发流程,提供统一规范,提升效率。一套优秀的爬虫框架会利用多线程,多进程,分布式,IP池等能力,帮助开发者快速开发出易于维护的工业级爬虫,长期受用。

特性

  • 可配置代理
  • 支持任务重试
  • 支持Puppeteer
  • 异步队列服务友好
  • 多进程友好

安装

npm i gz-spider --save

使用

const spider = require('gz-spider');
// 每个爬虫是一个方法,需要通过setProcesser注册
spider.setProcesser({
  ['getGoogleSearchResult']: async (fetcher, params) => {
    // fetcher.page是原始的puppeteer page,可以直接用于打开页面
    let resp = await fetcher.axios.get(`https://www.google.com/search?q=${params}`);
    // throw 'Retry', will retry this processer
    // throw 'ChangeProxy', will retry this processer use new proxy
    // throw 'Fail', will finish this processer with message(fail) Immediately
    if (resp.status === 200) {
      // Data processing start
      let result = resp.data + 1;
      // Data processing end
      return result;
    } else {
      throw 'retry';
    }
  }
});
// 开始爬取
spider.getData('getGoogleSearchResult', params).then(userInfo => {
  console.log(userInfo);
});

配置

框架由三部分组成,fetcher、strategy、processer。

Fetcher

spider.setFetcher({
  axiosTimeout: 5000,
  proxyTimeout: 180 * 1000
  proxy() {
    // 支持返回Promise,可以从远端拉取代理的配置
    return {
      host: '127.0.0.1',
      port: '9000'
    }
  }
});
  • axiosTimeout: [Number] 每次爬虫请求的超时时间
  • proxyTimeout: [Number] 更新代理IP时间,代理IP有超时的场景使用,会重新执行proxy function,使用新的代理IP
  • proxy: [Object | Function] 当 proxy是[Function], 支持异步,可以从远端拉取代理的配置

    • proxy.host [String]
    • proxy.port [String]

Strategy

spider.setStrategy({
  retryTimes: 2
});
  • retryTimes: [Number] 最大重试次数

与任务队列结合使用

流程获取任务 -> `spider.getData(processerKey, processerIn)` -> 完成任务并带上处理好的数据

用MySql模拟任务队列

  • 创建spider-task表, 至少包含'id', 'status', 'processer_key', 'processer_input', 'processer_output'
  • 写一个拉取未完成任务的接口, 例如 GET /spider/task
  • 写一个完成任务的接口, 例如 PUT /spider/task
const axios = require('axios');
while (true) {
  // 获取任务
  let resp = await axios.get('http://127.0.0.1:8080/spider/task');
  if (!resp.data.task) break;
  let { id, processerKey, processerInput } = resp.data.task;
  let processerOutput = await spider.getData(processerKey, processerInput);
  // 完成任务并带上处理好的数据
  await axios.put('http://127.0.0.1:8080/spider/task', {
    id, processerOutput,
    status: 'success'
  });
}

对爬虫的一些理解

爬虫的运行方式就决定了它无法做到长久稳定和实时。在设计爬虫框架的时候,围绕的点是异步任务队列。工程上爬虫框架会提供一个高效的数据处理流水线,并可适配多种任务队列。

gz-spider分为三个组成部分,fetcher,strategy和processer。

  • fetcher抓取器,其中包含常用的http和puppeteer,并且可以挂各种类型的代理。
  • strategy策略中心,负责配置爬取失败后的各种策略。
  • processer负责从原始数据结构处理为目标数据的过程,也是爬虫框架用户要写的部分

License

MIT

以上就是NodeJs爬虫框架Spider基础使用教程的详细内容,更多关于NodeJs爬虫框架Spider的资料请关注脚本之家其它相关文章!

相关文章

  • Nest.js使用multer实现文件上传功能

    Nest.js使用multer实现文件上传功能

    这篇文章主要为大家详细介绍了Nest.js鹅湖使用multer实现文件上传功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Node 创建第一个服务器应用的操作方法

    Node 创建第一个服务器应用的操作方法

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序,它采用事件驱动、非阻塞I/O模型,使得程序可以以高效地方式处理并发请求,这篇文章主要介绍了Node 创建第一个服务器应用,需要的朋友可以参考下
    2024-02-02
  • nodejs个人博客开发第一步 准备工作

    nodejs个人博客开发第一步 准备工作

    这篇文章主要为大家详细介绍了nodejs个人博客开发的准备工作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 解决Linux无法正常安装与卸载Node.js的方法

    解决Linux无法正常安装与卸载Node.js的方法

    最近在学习node.js,所以下面这篇文章主要给大家介绍了关于如何解决Linux无法正常安装与卸载Node.js的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2018-01-01
  • nodejs简单实现TCP服务器端和客户端的聊天功能示例

    nodejs简单实现TCP服务器端和客户端的聊天功能示例

    这篇文章主要介绍了nodejs简单实现TCP服务器端和客户端的聊天功能,结合实例形式分析了nodejs基于TCP协议实现的聊天程序客户端与服务器端具体步骤与相关操作技巧,代码备有较为详尽的注释便于理解,需要的朋友可以参考下
    2018-01-01
  • NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解

    NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解

    本篇文章主要介绍了NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • node.js中fs文件系统模块的使用方法实例详解

    node.js中fs文件系统模块的使用方法实例详解

    这篇文章主要介绍了node.js中fs文件系统模块的使用方法,结合实例形式详细分析了node.js fs文件系统模块各种常见方法的基本使用技巧与相关操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Google官方支持的NodeJS访问API,提供后台登录授权

    Google官方支持的NodeJS访问API,提供后台登录授权

    Google官方支持的NodeJS集成客户端,用以访问Google APIs, 支持OAuth 2.0授信及登录认证。登录以后即可在后台访问例如 Google Drive(云存储), Google Analytics, Gmail等服务。
    2014-07-07
  • 详解阿里Node.js技术文档之process模块学习指南

    详解阿里Node.js技术文档之process模块学习指南

    这篇文章主要介绍了详解阿里Node.js技术文档之process模块学习指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • nodejs调用cmd命令实现复制目录

    nodejs调用cmd命令实现复制目录

    本文给大家介绍的是如何在nodejs中调用CMD命令,从而实现目录的复制,非常的实用,有需要的小伙伴可以参考下。
    2015-05-05

最新评论