最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJs爬蟲框架Spider基礎使用教程

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

gz-spider

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

為什么需要爬蟲框架

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

特性

  • 可配置代理
  • 支持任務重試
  • 支持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有超時的場景使用,會重新執(zhí)行proxy function,使用新的代理IP
  • proxy: [Object | Function] 當 proxy是[Function], 支持異步,可以從遠端拉取代理的配置

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

Strategy

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

與任務隊列結合使用

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

用MySql模擬任務隊列

  • 創(chuàng)建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);
  // 完成任務并帶上處理好的數(shù)據(jù)
  await axios.put('http://127.0.0.1:8080/spider/task', {
    id, processerOutput,
    status: 'success'
  });
}

對爬蟲的一些理解

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

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

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

License

MIT

以上就是NodeJs爬蟲框架Spider基礎使用教程的詳細內容,更多關于NodeJs爬蟲框架Spider的資料請關注腳本之家其它相關文章!

相關文章

  • nodejs微信開發(fā)之自動回復的實現(xiàn)

    nodejs微信開發(fā)之自動回復的實現(xiàn)

    這篇文章主要介紹了nodejs微信開發(fā)之自動回復的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Node.js中npm 和 peerDependencies的使用

    Node.js中npm 和 peerDependencies的使用

    本文詳細介紹了npm中的peerDependencies和--legacy-peer-deps使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • 如何設置process.env.NODE_ENV生產(chǎn)環(huán)境模式

    如何設置process.env.NODE_ENV生產(chǎn)環(huán)境模式

    process.env.NODE_ENV默認只有兩種狀態(tài)即development和production,本文主要介紹了process.env.NODE_ENV設置生產(chǎn)環(huán)境模式,感興趣的可以了解一下
    2021-09-09
  • 詳解使用PM2管理nodejs進程

    詳解使用PM2管理nodejs進程

    本篇文章主要介紹了詳解使用PM2管理nodejs進程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • nodejs dgram模塊廣播+組播的實現(xiàn)示例

    nodejs dgram模塊廣播+組播的實現(xiàn)示例

    這篇文章主要介紹了nodejs dgram模塊廣播+組播的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • node.js中koa和express的差異對比

    node.js中koa和express的差異對比

    Express和koa都是服務端的開發(fā)框架,服務端開發(fā)的重點是對HTTP Request和HTTP Response兩個對象的封裝和處理,下面這篇文章主要給大家介紹了關于node.js中koa和express的差異對比,需要的朋友可以參考下
    2023-05-05
  • Sequelize中用group by進行分組聚合查詢

    Sequelize中用group by進行分組聚合查詢

    大家都知道在SQL查詢中,分組查詢是較常用的一種查詢方式。分組查詢是指通過GROUP BY關鍵字,將查詢結果按照一個或多個字段進行分組,分組時字段值相同的會被分為一組。在Node.js基于Sequelize的ORM框架中,同樣支持分組查詢,使用非常簡單方便。下面來看看詳細的介紹。
    2016-12-12
  • nodeJs鏈接Mysql做增刪改查的簡單操作

    nodeJs鏈接Mysql做增刪改查的簡單操作

    本篇文章主要介紹了nodeJs鏈接Mysql做增刪改查的簡單操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • nodejs執(zhí)行javaScript原理超詳細講解

    nodejs執(zhí)行javaScript原理超詳細講解

    Node.js是目前非常流行的JavaScript運行環(huán)境,其背后有著強大的libuv庫支撐其非阻塞I/O操作,這篇文章主要介紹了nodejs執(zhí)行javaScript原理的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • Node.js web 應用如何封裝到Docker容器中

    Node.js web 應用如何封裝到Docker容器中

    這篇文章主要介紹了Node.js web 應用如何封裝到Docker容器中,幫助大家更好的學習node.js和使用docker容器,感興趣的朋友可以了解下
    2020-09-09

最新評論

哈尔滨市| 芜湖县| 炉霍县| 花莲县| 托克逊县| 揭东县| 绥化市| 沙雅县| 锦屏县| 华阴市| 鄯善县| 岱山县| 阜南县| 沈丘县| 牡丹江市| 连江县| 九江市| 黄梅县| 利津县| 富源县| 陆河县| 灵宝市| 格尔木市| 紫云| 怀仁县| 宕昌县| 玛纳斯县| 淄博市| 赤城县| 富平县| 苏尼特左旗| 潮安县| 突泉县| 武夷山市| 建宁县| 卫辉市| 温宿县| 大港区| 台北县| 柘荣县| 阜宁县|