Webmagic 一个java爬虫框架
2020年1月26日 0.7.3版本
https://github.com/code4craft/webmagic
架构仿照scrapy
内部添加了注解、请求优先级、页面解析类的封装
功能很全面
框架
一、封装类 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接口集合可以将结果放到多个地方 默认会打印到控制台
网友评论