欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJs爬蟲框架Spider基礎(chǔ)使用教程

 更新時(shí)間:2023年07月24日 09:13:48   作者:GeoffZhu  
這篇文章主要為大家介紹了NodeJs爬蟲框架Spider基礎(chǔ)使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

gz-spider

一個(gè)基于Puppeteer和Axios的NodeJs爬蟲框架 源碼倉庫

為什么需要爬蟲框架

爬蟲框架可以簡化開發(fā)流程,提供統(tǒng)一規(guī)范,提升效率。一套優(yōu)秀的爬蟲框架會(huì)利用多線程,多進(jìn)程,分布式,IP池等能力,幫助開發(fā)者快速開發(fā)出易于維護(hù)的工業(yè)級(jí)爬蟲,長期受用。

特性

  • 可配置代理
  • 支持任務(wù)重試
  • 支持Puppeteer
  • 異步隊(duì)列服務(wù)友好
  • 多進(jìn)程友好

安裝

npm i gz-spider --save

使用

const spider = require('gz-spider');
// 每個(gè)爬蟲是一個(gè)方法,需要通過setProcesser注冊(cè)
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,可以從遠(yuǎn)端拉取代理的配置
    return {
      host: '127.0.0.1',
      port: '9000'
    }
  }
});
  • axiosTimeout: [Number] 每次爬蟲請(qǐng)求的超時(shí)時(shí)間
  • proxyTimeout: [Number] 更新代理IP時(shí)間,代理IP有超時(shí)的場景使用,會(huì)重新執(zhí)行proxy function,使用新的代理IP
  • proxy: [Object | Function] 當(dāng) proxy是[Function], 支持異步,可以從遠(yuǎn)端拉取代理的配置

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

Strategy

spider.setStrategy({
  retryTimes: 2
});
  • retryTimes: [Number] 最大重試次數(shù)

與任務(wù)隊(duì)列結(jié)合使用

流程獲取任務(wù) -> `spider.getData(processerKey, processerIn)` -> 完成任務(wù)并帶上處理好的數(shù)據(jù)

用MySql模擬任務(wù)隊(duì)列

  • 創(chuàng)建spider-task表, 至少包含'id', 'status', 'processer_key', 'processer_input', 'processer_output'
  • 寫一個(gè)拉取未完成任務(wù)的接口, 例如 GET /spider/task
  • 寫一個(gè)完成任務(wù)的接口, 例如 PUT /spider/task
const axios = require('axios');
while (true) {
  // 獲取任務(wù)
  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);
  // 完成任務(wù)并帶上處理好的數(shù)據(jù)
  await axios.put('http://127.0.0.1:8080/spider/task', {
    id, processerOutput,
    status: 'success'
  });
}

對(duì)爬蟲的一些理解

爬蟲的運(yùn)行方式就決定了它無法做到長久穩(wěn)定和實(shí)時(shí)。在設(shè)計(jì)爬蟲框架的時(shí)候,圍繞的點(diǎn)是異步任務(wù)隊(duì)列。工程上爬蟲框架會(huì)提供一個(gè)高效的數(shù)據(jù)處理流水線,并可適配多種任務(wù)隊(duì)列。

gz-spider分為三個(gè)組成部分,fetcher,strategy和processer。

  • fetcher抓取器,其中包含常用的http和puppeteer,并且可以掛各種類型的代理。
  • strategy策略中心,負(fù)責(zé)配置爬取失敗后的各種策略。
  • processer負(fù)責(zé)從原始數(shù)據(jù)結(jié)構(gòu)處理為目標(biāo)數(shù)據(jù)的過程,也是爬蟲框架用戶要寫的部分

License

MIT

以上就是NodeJs爬蟲框架Spider基礎(chǔ)使用教程的詳細(xì)內(nèi)容,更多關(guān)于NodeJs爬蟲框架Spider的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nest.js使用multer實(shí)現(xiàn)文件上傳功能

    Nest.js使用multer實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了Nest.js鵝湖使用multer實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Node 創(chuàng)建第一個(gè)服務(wù)器應(yīng)用的操作方法

    Node 創(chuàng)建第一個(gè)服務(wù)器應(yīng)用的操作方法

    Node.js是一個(gè)基于Chrome V8引擎的JavaScript運(yùn)行環(huán)境,可以用于構(gòu)建高性能的網(wǎng)絡(luò)應(yīng)用程序,它采用事件驅(qū)動(dòng)、非阻塞I/O模型,使得程序可以以高效地方式處理并發(fā)請(qǐng)求,這篇文章主要介紹了Node 創(chuàng)建第一個(gè)服務(wù)器應(yīng)用,需要的朋友可以參考下
    2024-02-02
  • nodejs個(gè)人博客開發(fā)第一步 準(zhǔn)備工作

    nodejs個(gè)人博客開發(fā)第一步 準(zhǔn)備工作

    這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開發(fā)的準(zhǔn)備工作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 解決Linux無法正常安裝與卸載Node.js的方法

    解決Linux無法正常安裝與卸載Node.js的方法

    最近在學(xué)習(xí)node.js,所以下面這篇文章主要給大家介紹了關(guān)于如何解決Linux無法正常安裝與卸載Node.js的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能示例

    nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能示例

    這篇文章主要介紹了nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能,結(jié)合實(shí)例形式分析了nodejs基于TCP協(xié)議實(shí)現(xiàn)的聊天程序客戶端與服務(wù)器端具體步驟與相關(guān)操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2018-01-01
  • NodeJS、NPM安裝配置步驟(windows版本) 以及環(huán)境變量詳解

    NodeJS、NPM安裝配置步驟(windows版本) 以及環(huán)境變量詳解

    本篇文章主要介紹了NodeJS、NPM安裝配置步驟(windows版本) 以及環(huán)境變量詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • node.js中fs文件系統(tǒng)模塊的使用方法實(shí)例詳解

    node.js中fs文件系統(tǒng)模塊的使用方法實(shí)例詳解

    這篇文章主要介紹了node.js中fs文件系統(tǒng)模塊的使用方法,結(jié)合實(shí)例形式詳細(xì)分析了node.js fs文件系統(tǒng)模塊各種常見方法的基本使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Google官方支持的NodeJS訪問API,提供后臺(tái)登錄授權(quán)

    Google官方支持的NodeJS訪問API,提供后臺(tái)登錄授權(quán)

    Google官方支持的NodeJS集成客戶端,用以訪問Google APIs, 支持OAuth 2.0授信及登錄認(rèn)證。登錄以后即可在后臺(tái)訪問例如 Google Drive(云存儲(chǔ)), Google Analytics, Gmail等服務(wù)。
    2014-07-07
  • 詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南

    詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南

    這篇文章主要介紹了詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • nodejs調(diào)用cmd命令實(shí)現(xiàn)復(fù)制目錄

    nodejs調(diào)用cmd命令實(shí)現(xiàn)復(fù)制目錄

    本文給大家介紹的是如何在nodejs中調(diào)用CMD命令,從而實(shí)現(xiàn)目錄的復(fù)制,非常的實(shí)用,有需要的小伙伴可以參考下。
    2015-05-05

最新評(píng)論