WebMagic 爬蟲框架學習

http://webmagic.io/docs/zh/posts/ch1-overview/architecture.html

1.2 總體架構

WebMagic的結構分爲DownloaderPageProcessorSchedulerPipeline四大組件,並由Spider將它們彼此組織起來。這四大組件對應爬蟲生命週期中的下載、處理、管理和持久化等功能。WebMagic的設計參考了Scapy,但是實現方式更Java化一些。

而Spider則將這幾個組件組織起來,讓它們可以互相交互,流程化的執行,可以認爲Spider是一個大的容器,它也是WebMagic邏輯的核心。

WebMagic總體架構圖如下:

1.2.1 WebMagic的四個組件

1.Downloader

Downloader負責從互聯網上下載頁面,以便後續處理。WebMagic默認使用了Apache HttpClient作爲下載工具。

2.PageProcessor

PageProcessor負責解析頁面,抽取有用信息,以及發現新的鏈接。WebMagic使用Jsoup作爲HTML解析工具,並基於其開發瞭解析XPath的工具Xsoup

在這四個組件中,PageProcessor對於每個站點每個頁面都不一樣,是需要使用者定製的部分。

3.Scheduler

Scheduler負責管理待抓取的URL,以及一些去重的工作。WebMagic默認提供了JDK的內存隊列來管理URL,並用集合來進行去重。也支持使用Redis進行分佈式管理。

除非項目有一些特殊的分佈式需求,否則無需自己定製Scheduler。

4.Pipeline

Pipeline負責抽取結果的處理,包括計算、持久化到文件、數據庫等。WebMagic默認提供了“輸出到控制檯”和“保存到文件”兩種結果處理方案。

Pipeline定義了結果保存的方式,如果你要保存到指定數據庫,則需要編寫對應的Pipeline。對於一類需求一般只需編寫一個Pipeline

1.2.2 用於數據流轉的對象

1. Request

Request是對URL地址的一層封裝,一個Request對應一個URL地址。

它是PageProcessor與Downloader交互的載體,也是PageProcessor控制Downloader唯一方式。

除了URL本身外,它還包含一個Key-Value結構的字段extra。你可以在extra中保存一些特殊的屬性,然後在其他地方讀取,以完成不同的功能。例如附加上一個頁面的一些信息等。

2. Page

Page代表了從Downloader下載到的一個頁面——可能是HTML,也可能是JSON或者其他文本格式的內容。

Page是WebMagic抽取過程的核心對象,它提供一些方法可供抽取、結果保存等。在第四章的例子中,我們會詳細介紹它的使用。

3. ReusltItems

ReusltItems相當於一個Map,它保存PageProcessor處理的結果,供Pipeline使用。它的API與Map很類似,值得注意的是它有一個字段skip,若設置爲true,則不應被Pipeline處理。

1.2.3 控制爬蟲運轉的引擎--Spider

Spider是WebMagic內部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一個屬性,這些屬性是可以自由設置的,通過設置這個屬性可以實現不同的功能。Spider也是WebMagic操作的入口,它封裝了爬蟲的創建、啓動、停止、多線程等功能。下面是一個設置各個組件,並且設置多線程和啓動的例子。詳細的Spider設置請看第四章——爬蟲的配置、啓動和終止

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();
}

1.2.4 快速上手

上面介紹了很多組件,但是其實使用者需要關心的沒有那麼多,因爲大部分模塊WebMagic已經提供了默認實現。

一般來說,對於編寫一個爬蟲,PageProcessor是需要編寫的部分,而Spider則是創建和控制爬蟲的入口。在第四章中,我們會介紹如何通過定製PageProcessr來編寫一個爬蟲,並通過Spider來啓動。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章