美文网首页
Webmagic源码分析

Webmagic源码分析

作者: with_dream | 来源:发表于2021-01-26 14:20 被阅读0次

    Webmagic 一个java爬虫框架
    2020年1月26日 0.7.3版本

    https://github.com/code4craft/webmagic
    架构仿照scrapy
    内部添加了注解、请求优先级、页面解析类的封装
    功能很全面

    Webmagic.jpg

    框架

    一、封装类 Spider

    Spider实现Runnable
    在run方法中调用initComponent() 初始化Downloader和线程池threadPool
    ** 1、然后Spider线程在while循环中通过scheduler.poll获取任务 分发给threadPool执行 **
    任务获取 是通过Spider线程轮询 如果没有任务 则阻塞并设置超时时间

    ** 2、子线程调用processRequest执行Downloader下载任务 **
    每个Request可以单独设置下载器
    下载完成 被封装为Page 内部封装了Jsoup解析器

    ** 3、下载完成 执行onDownloadSuccess **
    ** 4、首先执行PageProcessor接口 用于解析页面 **
    ** 5、然后调用extractAndAddRequests 将页面中获取的新url加入 继续解析 **
    ** 6、最后调用Pipeline接口集合 去做存储等操作 **

    二、调度器 Scheduler

    Scheduler主要作用是去重和缓存任务
    去重策略主要实现DuplicateRemover 有HashSet/布隆过滤器/Redis的Set

    缓存使用内存缓存和Redis 如果使用内嵌数据库 应该会更好一些
    缓存的优先级 是使用多个java集合和Redis多个字段区分(RedisPriorityScheduler)

    获取时 先获取高优先级的队列即可

    默认实现了Redis 可以实现分布式

    三、网页下载 Downloader

    下载器实现了httpclient连接池/plantomJS/selenium

    httpclient连接池已经封装了https的处理 功能更加强大

    四、页面解析 PageProcessor

    主要用于页面解析 Page中已经内置了jsoup解析器
    默认有三种实现
    ConfigurablePageProcessor:配置编写规则(将规则封装为ExtractRule 然后根据规则匹配解析)
    ModelPageProcessor:注解解析 将解析规则进一步抽离 使用注解+反射的形式完成页面的解析
    ScriptProcessor:使用其他语言:js/py等

    五、结果处理

    Pipeline接口集合可以将结果放到多个地方 默认会打印到控制台

    相关文章

      网友评论

          本文标题:Webmagic源码分析

          本文链接:https://www.haomeiwen.com/subject/oxdgzktx.html