老狗啃爬虫-增量爬取之Scheduler
计算机程序在运行的时候,并不是完全如期望的一样顺风顺水,很多因素都可能会导致程序中断,爬虫程序亦是如此。在爬取数据的过程中,如果意外中断,并且我们还没有做相应的预案,那可能就是一场灾难,由于我们不知道爬虫程序的具体的爬取工作进度,不知道哪儿爬过了哪儿没爬过,吭哧吭哧费劲巴哈爬取的巨量数据,也只能前功尽弃,反复徒劳
计算机程序在运行的时候,并不是完全如期望的一样顺风顺水,很多因素都可能会导致程序中断,爬虫程序亦是如此。在爬取数据的过程中,如果意外中断,并且我们还没有做相应的预案,那可能就是一场灾难,由于我们不知道爬虫程序的具体的爬取工作进度,不知道哪儿爬过了哪儿没爬过,吭哧吭哧费劲巴哈爬取的巨量数据,也只能前功尽弃,反复徒劳
经过对WebMagic的源码进行了走读,知道了Spider默认设置了QueueScheduler,用以处理链接重复的问题。本次学习我们再次对WebMagic的源码进行了走读,并实现了一个判定重复的简单逻辑。至此,WebMagic框架的Scheduler组件是如何实现对URL的判定重复,实际应用中,会有更加具体、更加复杂的业务需要,我们在此思路下进行实现即可
读过源代码,再回顾我们之前所学所述,WebMagic的工作机制,以及之后我们如何设计具体的爬虫程序,思路会更加明了清晰。我们知道了Scheduler是WebMagic中进行URL管理的组件,其作用是对待抓取的URL队列进行管理和对已抓取的URL进行去重。有时候不同的URL指向的是相同的页面,这时候去重就不是简单的URL字符串对比了
composer 是 php 包管理工具,通常使用 composer 安装扩展包将会在当前目录创建一个 vendor 文件夹,并将所有依赖文件放在其中。一般这个目录需要放在 web 目录外,用户不能直接访问。这里,PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 模块,如果生产环境中安装了PHPUnit,且该模块目录拥有Web可访问权限,则存在远程代码执行漏洞
WebMagic框架的使用中,Pipeline组件完全是插拔式的,即我们根据功能需要,可以随意增加组合实现。事实上WebMagic框架所有的功能组件都是如此,Spider是一个队列总线,所有的组件都通过接口的实现,参与到整个数据抓取处理流程的工作中来,分工合作,按需定制,这种设计思想也是以后我们在程序设计上非常值得借鉴的
在爬虫框架WebMagic中,用于保存结果的组件叫做Pipeline。在WebMagic已经实现了的Pipeline接口中,如果我们仅仅是想把抓取数据进行控制台输出,我们可以借助它的ConsolePipeline;如果我们想将数据以文件的形式进行存储,即可借助它的FilePipeline。如果我们想实现自己想要的具体功能,我们就得定制我们所需的Pipeline
无论是Jsoup还是Xsoup,都是为了实现HTML页面文件的解析和数据定位,还有正则表达式,根据这些技术原理,WebMagic进一步集成浓缩,将这些我们在爬虫开发过程中使用频率很高的功能,抽提出一个叫Selectable的接口。Selectable可以使我们在操作中简单快捷的完成页面元素的提取,不去关心具体操作细节,而把更多的精力用在爬虫业务的实现上
爬虫爬取内容,本质就是把网站页面下载、读取过来,然后其核心工作就是解析定位,提取数据。这里说的Jsoup、Xsoup、CSS选择器、Xpath、JsonPath,包括正则表达式的应用,都是数据处理过程中必不可少的基础性技术。我们使用的爬虫框架WebMagic,是使用Jsoup作为HTML解析工具的,还有基于Jsoup升级了能解析XPath的工具Xsoup
WebMagic是一个简单灵活的Java爬虫框架。其简单的API,容易上手,模块化的结构,便于轻松扩展;同时也功能完备,且提供多线程和分布式支持。基于WebMagic,我们可以快速开发出一个高效、易维护的爬虫。WebMagic框架主要由Downloader、PageProcessor、Scheduler、Pipeline四大组件组成
VicWord是一个基于php语言的分词插件,分词功能,一般常见于全文搜索,语义识别等,我们此处是想用于做文本内容高频词、关键词提取。Jieba也是一个基于php语言的分词插件,关于使用偏好来说呢,结巴分词功能相对比较齐全,所以想实现一些特定功能的时候,是可以考虑结巴分词的,一般来说,VicWord分词是个不错的选择