爬虫学习之webmagic源码解析

笔者最近发现偶然发现一个非常友好的java爬虫框架,感觉非常适合用来java代码以及爬虫知识的学习,随通过查阅网上资料以及阅读其官方手册,并且分析其源代码,学习到了非常多的有用知识,包括java开发的基本哲学,面向对象的知识,设计模式,当然最重要的还是爬虫开发的一系列知识。本篇作为源代码webmagic的开篇,主要聊一聊其框架的整体结构以及其关键的核心代码。

0xo0:什么是爬虫🕷

简单来讲,爬虫是通过程序自动的从网络上抓取特定的url并且从获得的html(通常情况下)分析出我们感兴趣的内容。也就是说爬虫可以大致分为两个步骤:1、抓取(下载)url,2、分析下载到的内容。当然这是一个极度简化的步骤,但是足以说明爬虫的工作原理了。

0x01:webmagic的整体分析🕷

这里是webmagic框架的官方介绍:WebMagic的结构分为DownloaderPageProcessorSchedulerPipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。

而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。

WebMagic总体架构图如下:

从示意图上我们大致可以看出:

  • Downloader负责下载功能,其输入是Request,输出是Page。由于download是从互联网上获取内容,因此他是io密集型的程序。并且他实际上承担着生产者和消费者双重身份,消费Request,生产Page。
  • PageProcessor负责页面的处理功能。具体来说,一般是分析页面,抽取感兴趣的内容,以及发现新的url。其输入是Page,输出是Request。由于PageProcessor是对文本页面进行分析,设计到复杂的操作,因此他是cpu密集型的程序。而且他也承担着生产者和消费者的双重身份。和Downloader正好相反,消费Page,生产Request。需要注意的是,这部分是爬虫开发者必须实现的类,也是创建爬虫的必选参数。
  • Scheduler则负责协调PageProcessor和Downloader。通过对Request的管理,来实现对两者的管理。原理类似于通过阻塞队列来同步生产者和消费者。这里涉及大量的多线程知识,待后续博客详细讲解。
  • Pipeline则是对持久化的抽象。一种持久化手段对应一个PipeLine类。包括将结果持久化到文件、数据库或者直接打印到屏幕。

下面通过一段代码直观感受Spider的使用:

public class ZhihuPageProcessor implements PageProcessor {
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
    @
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值