总体架构
WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。
而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
Downloader
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。
PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。
在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。
除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler。
Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。
Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
用于数据流转的对象
1. Request
Request是对URL地址的一层封装,一个Request对应一个URL地址。
它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式。
除了URL本身外,它还包含一个Key-Value结构的字段extra。你可以在extra中保存一些特殊的属性,然后在其他地方读取,以完成不同的功能。例如附加上一个页面的一些信息等。
Page
Page代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。
Page是WebMagic抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。
ResultItems
ResultItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。它的API与Map很类似,值得注意的是它有一个字段skip,若设置为true,则不应被Pipeline处理。
控制爬虫运转的引擎--Spider
Spider是WebMagic内部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能。下面是一个设置各个组件,并且设置多线程和启动的例子。
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor())
//从https://github.com/code4craft开始抓
.addUrl("https://github.com/code4craft")
//设置Scheduler,使用Redis来管理URL队列
.setScheduler(new RedisScheduler("localhost"))
//设置Pipeline,将结果以json方式保存到文件
.addPipeline(new JsonFilePipeline("D:\\data\\webmagic"))
//开启5个线程同时执行
.thread(5)
//启动爬虫
.run();
}
- 大小: 85.8 KB
分享到:
相关推荐
WebMagic的整体架构分为四个主要组件: 1. **Downloader(下载器)**:负责从互联网下载网页数据。 2. **PageProcessor(页面处理器)**:对下载的页面进行解析和处理,提取有用的信息。 3. **Scheduler(调度器)**...
WebMagic是一个强大的Java爬虫框架,它为开发者提供了一种简单而高效的方式来抓取网页数据。这个框架的设计理念是模块化,使得各个组件可以独立工作,同时也方便了扩展和定制。在"webmagic爬取数据"这个主题中,我们...
Webmagic是一个强大的、模块化的Java爬虫框架,它设计的目标是简化网页抓取的复杂性,让开发者可以更加专注于业务逻辑。在webporter中,webmagic作为一个核心组件,为开发者提供了高效、灵活的网页抓取能力。 首先...
10. **爬虫框架**:虽然本项目没有明确提及使用特定的爬虫框架,但Java中有如Jsoup、WebMagic等流行的爬虫框架,它们提供了一套完整的解决方案,简化了爬虫开发流程。 11. **并发控制**:多线程环境下,需要考虑...
对于更复杂的爬虫项目,可能会涉及到`WebMagic`或`JsoupSpider`这样的高级爬虫框架。这些框架提供了完整的爬虫解决方案,包括URL管理、下载器、解析器和存储器等组件,简化了爬虫的开发流程。 此外,为了防止被网站...
在JobHunter项目中,Spring被用来整合各个组件,如WebMagic的配置和Mybatis的数据访问层,提供整体的结构支持。 3. **HTTP与HTTPS**:HTTP是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到...
- **WebMagic**:一个简单易用的Java爬虫框架,支持多线程、分布式爬取,内置了PageModel和Pipeline机制,便于数据处理和存储。 - **Colt**:更复杂的爬虫框架,支持大规模爬取,提供了强大的中间件和扩展功能。 ...
它可以利用Hadoop或Spark等大数据处理框架,将任务拆分到多台机器上并行处理,提高整体性能。通过JStarCraft的分布式索引和查询处理,可以实现大规模数据的高效检索。 **4. 自然语言处理在搜索引擎中的应用** ...
8. 网络爬虫框架:在实际应用中,可以利用现有的网络爬虫框架如WebMagic、Crawler4j等快速构建自己的网络爬虫,这些框架提供了爬取、解析、存储、管理等功能的封装。 最后,文档中包含免责申明,强调所提供的资料仅...
整体来看,《科学脱口秀》Android端的设计与实现充分考虑了用户体验,通过定制化的功能和高效的数据处理,为用户打造了一个便捷、流畅的播客收听环境。同时,其背后的技术实现展示了Android应用开发中的最佳实践,...
8. **爬虫框架**:虽然这个爬虫不依赖外部库,但通常开发爬虫会使用一些成熟的框架,如Jsoup或WebMagic,它们提供了便利的API来简化爬取和解析过程。然而,不依赖这些库意味着代码可能需要更手动地处理许多细节。 9...
常用的Java爬虫框架有Jsoup和WebMagic,它们可以解析HTML文档,提取出我们需要的图片链接。 2. **HTTP请求与响应**: - 在爬取过程中,Java会发送HTTP GET请求到百度图片服务器,请求特定的图片资源。服务器响应后...
2. Java库支持:Java有许多用于网页抓取的库,如Jsoup、Apache HttpClient、WebMagic等。这些库提供了方便的API,简化了网络请求和HTML解析的过程。 二、ClassicPortry的实现框架 1. Jsoup库:ClassicPortry主要...