`
liyixing1
  • 浏览: 962810 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

WebMagic整体框架

阅读更多
总体架构


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中文资料

    WebMagic的整体架构分为四个主要组件: 1. **Downloader(下载器)**:负责从互联网下载网页数据。 2. **PageProcessor(页面处理器)**:对下载的页面进行解析和处理,提取有用的信息。 3. **Scheduler(调度器)**...

    webmagic爬取数据

    WebMagic是一个强大的Java爬虫框架,它为开发者提供了一种简单而高效的方式来抓取网页数据。这个框架的设计理念是模块化,使得各个组件可以独立工作,同时也方便了扩展和定制。在"webmagic爬取数据"这个主题中,我们...

    webporter是一个基于webmagic的Java爬虫应用

    Webmagic是一个强大的、模块化的Java爬虫框架,它设计的目标是简化网页抓取的复杂性,让开发者可以更加专注于业务逻辑。在webporter中,webmagic作为一个核心组件,为开发者提供了高效、灵活的网页抓取能力。 首先...

    一个基于java的多线程爬虫项目.zip

    10. **爬虫框架**:虽然本项目没有明确提及使用特定的爬虫框架,但Java中有如Jsoup、WebMagic等流行的爬虫框架,它们提供了一套完整的解决方案,简化了爬虫开发流程。 11. **并发控制**:多线程环境下,需要考虑...

    爬虫必含包

    对于更复杂的爬虫项目,可能会涉及到`WebMagic`或`JsoupSpider`这样的高级爬虫框架。这些框架提供了完整的爬虫解决方案,包括URL管理、下载器、解析器和存储器等组件,简化了爬虫的开发流程。 此外,为了防止被网站...

    jobhunter:https

    在JobHunter项目中,Spring被用来整合各个组件,如WebMagic的配置和Mybatis的数据访问层,提供整体的结构支持。 3. **HTTP与HTTPS**:HTTP是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到...

    计算机毕业设计 Java网络爬虫(蜘蛛)源码-zhizhu开发文档说明 软件/插件 模板 JAVA程序源码

    - **WebMagic**:一个简单易用的Java爬虫框架,支持多线程、分布式爬取,内置了PageModel和Pipeline机制,便于数据处理和存储。 - **Colt**:更复杂的爬虫框架,支持大规模爬取,提供了强大的中间件和扩展功能。 ...

    基于JStarCraft实现的搜索引擎.zip

    它可以利用Hadoop或Spark等大数据处理框架,将任务拆分到多台机器上并行处理,提高整体性能。通过JStarCraft的分布式索引和查询处理,可以实现大规模数据的高效检索。 **4. 自然语言处理在搜索引擎中的应用** ...

    自己动手写网络爬虫

    8. 网络爬虫框架:在实际应用中,可以利用现有的网络爬虫框架如WebMagic、Crawler4j等快速构建自己的网络爬虫,这些框架提供了爬取、解析、存储、管理等功能的封装。 最后,文档中包含免责申明,强调所提供的资料仅...

    《科学脱口秀》Android端的设计与实现.pdf

    整体来看,《科学脱口秀》Android端的设计与实现充分考虑了用户体验,通过定制化的功能和高效的数据处理,为用户打造了一个便捷、流畅的播客收听环境。同时,其背后的技术实现展示了Android应用开发中的最佳实践,...

    一个用java写的爬虫,不依赖其他包

    8. **爬虫框架**:虽然这个爬虫不依赖外部库,但通常开发爬虫会使用一些成熟的框架,如Jsoup或WebMagic,它们提供了便利的API来简化爬取和解析过程。然而,不依赖这些库意味着代码可能需要更手动地处理许多细节。 9...

    Java爬取百度图片进行人脸识别下载高颜值图片完整项目源码

    常用的Java爬虫框架有Jsoup和WebMagic,它们可以解析HTML文档,提取出我们需要的图片链接。 2. **HTTP请求与响应**: - 在爬取过程中,Java会发送HTTP GET请求到百度图片服务器,请求特定的图片资源。服务器响应后...

    ClassicPortry:通过网页抓取古诗词的应用

    2. Java库支持:Java有许多用于网页抓取的库,如Jsoup、Apache HttpClient、WebMagic等。这些库提供了方便的API,简化了网络请求和HTML解析的过程。 二、ClassicPortry的实现框架 1. Jsoup库:ClassicPortry主要...

Global site tag (gtag.js) - Google Analytics