当前位置: 首页 > 后端技术 > Node.js

NodeJs爬虫框架-Spider

时间:2023-04-03 17:22:48 Node.js

gz-spider是一个基于Puppeteer和Axios的NodeJs爬虫框架为什么源码仓库需要爬虫框架一个爬虫框架可以简化开发流程,提供统一规范,提高效率。一个优秀的爬虫框架会利用多线程、多进程、分布式、IP池等能力,帮助开发者快速开发出易于维护、可长期使用的工业级爬虫。特性可配置代理支持任务重试支持Puppeteer异步队列服务友好多进程友好安装npmigz-spider--saveusesconstspider=require('gz-spider');//每个爬虫都是一个方法,需要通过setProcesser注册spider.setProcesser({['getGoogleSearchResult']:async(fetcher,params)=>{//fetcher.page为原始puppeteer页面,可直接打开页面使用letresp=awaitfetcher.axios.get(`https://www.google.com/search?q=${params}`);//抛出'Retry',将重试此处理器//抛出'ChangeProxy',将重试此处理器使用新代理//throw'Fail',willfinishthisprocessorwithmessage(fail)Immediatelyif(resp.status===200){//数据处理开始letresult=resp.data+1;//数据处理结束returnresult;}else{throw'retry';}}});//开始抓取spider.getData('getGoogleSearchResult',params).then(userInfo=>{console.log(userInfo);});配置框架由三部分组成,fetcher、strategy、processor。Fetcherspider.setFetcher({axiosTimeout:5000,proxyTimeout:180*1000proxy(){//支持返回Promise,可以远程拉取代理配置return{host:'127.0.0.1',port:'9000'}}});axiosTimeout:[Number]每次爬虫请求的超时时间。proxyTimeout:[Number]更新代理IP时间。如果代理IP出现超时场景,会重新执行代理函数,新的代理IPproxy:[Object|Function]当proxy为[Function]时,支持异步,可以从远程proxy.host[String]proxy.port[String]Strategyspider.setStrategy({retryTimes:2});retryTimes中拉取proxy的配置[Number]最大重试次数结合任务队列使用进程获取任务->`spider.getData(processerKey,processorIn)`->完成任务并带上处理后的数据。使用MySql模拟任务队列创建spider-task表,至少包含'id','status','processer_key','processer_input','processer_output'写一个拉取未完成任务的接口,比如GET/spider/task写一个完成任务的接口,比如PUT/spider/taskconstaxios=require('axios');while(true){//gettaskletresp=awaitaxios.get('http://127.0.0.1:8080/蜘蛛/任务');如果(!resp.data.task)中断;让{id,processorKey,processorInput}=resp.data.task;让processorOutput=awaitspider.getData(processerKey,processorInput);//完成任务并带上处理后的数据awaitaxios.put('http://127.0.0.1:8080/spider/task',{id,processorOutput,status:'success'});}对爬虫的一些理解爬虫的运行方式决定了它无法长期稳定实时。在设计爬虫框架时,重点是异步任务队列。在工程上,爬虫框架将提供高效的数据处理管道,可以适配各种任务队列。gz-spider分为三个部分,fetcher、strategy和processor。fetchergrabber,包含常用的http和puppeteer,可以挂各种类型的代理。strategy策略中心负责配置爬取失败后的各种策略。处理器负责从原始数据结构到目标数据的处理过程,也是爬虫框架用户需要编写的LicenseMIT的一部分