爬虫项目

 

spring data flow,各个服务通过rocketmq来串联

 springboot redis jpa Selenium  bucket4j rocketmq jieba |  es + hibernate search | 

UrlManager:

  管理需要采集的资源。

    种子资源的初始化(根据条件参数生成种子资源)-> 创建过程中加分布式锁

              资源的添加删除

              资源的优先级管理(优先级队列,开始使用redis + redission,但是效率很低,使用了二分发去插入,数据量大的时候很慢)

              资源的去重【布隆过滤器 redis + redission】

 

Downloader 【下载资源】

       根据message header里面的资源类型选择不同的下载器:

       为控制下载的频率,获取资源url时候使用RateLimter控制获取的频率。

       HttpClientDownloader:

    简单资源的采集(页面非异步加载,反爬虫弱),使用httpClient(jdk11(响应式(发布-订阅),非阻塞) ,OKHttp, apache httpclient)

      SeleniumDownloader:

    复杂资源(Selenium [səˈliːniəm]+ Chrome):

              因为 chrome的启动和销毁资源消耗比较大,所以用apache object pool写了个浏览器的资源池 用来管理浏览器的生命周期

              SeleniumDownloader的优化:资源加载速度的问题

  构建downLoader时候会传递:

         ProxyManager【代理管理器】:

     维护代理池,代理的生命周期

          UAFactory:

             生成动态的userAgent

     AuthenticationManager【凭证管理器,基于一个分布式的存储后端redis】

                管理登录过程中保存的凭证【cookie】

           DownloadFailedExceptionHandler【异常处理的策略】(不同的异常使用不同的策略处理):

                反爬拦截(验证码,滑块):先尝试操作浏览器解锁, 不行就 wait 或者 kill

                IOException:retry的逻辑 -> 先内部retry, retry还是失败回传给urlManager

        DownloadSuccessHandler(函数):

    列表:解析的资源连接回传到urlManager模块

              详情: 传递到解析模块   

 

ContentParser[内容的解析模块]:

     根据message的header路由不同的解析逻辑

     通过xpath去搜索dom解析html

 

内容的持久化:

      

posted @ 2022-12-06 18:50  albertjay  阅读(34)  评论(0)    收藏  举报