NodeJs爬蟲框架Spider基礎(chǔ)使用教程
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,使用新的代理IPproxy
: [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
以上就是NodeJs爬蟲框架Spider基礎(chǔ)使用教程的詳細(xì)內(nèi)容,更多關(guān)于NodeJs爬蟲框架Spider的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nest.js使用multer實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了Nest.js鵝湖使用multer實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Node 創(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-02nodejs個(gè)人博客開發(fā)第一步 準(zhǔn)備工作
這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開發(fā)的準(zhǔn)備工作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能示例
這篇文章主要介紹了nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能,結(jié)合實(shí)例形式分析了nodejs基于TCP協(xié)議實(shí)現(xiàn)的聊天程序客戶端與服務(wù)器端具體步驟與相關(guān)操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下2018-01-01NodeJS、NPM安裝配置步驟(windows版本) 以及環(huán)境變量詳解
本篇文章主要介紹了NodeJS、NPM安裝配置步驟(windows版本) 以及環(huán)境變量詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05node.js中fs文件系統(tǒng)模塊的使用方法實(shí)例詳解
這篇文章主要介紹了node.js中fs文件系統(tǒng)模塊的使用方法,結(jié)合實(shí)例形式詳細(xì)分析了node.js fs文件系統(tǒng)模塊各種常見方法的基本使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02Google官方支持的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í)指南,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01nodejs調(diào)用cmd命令實(shí)現(xiàn)復(fù)制目錄
本文給大家介紹的是如何在nodejs中調(diào)用CMD命令,從而實(shí)現(xiàn)目錄的復(fù)制,非常的實(shí)用,有需要的小伙伴可以參考下。2015-05-05