爬蟲 快速構建實時抓取集群

2022-04-13 16:25:14 字數 1517 閱讀 6131

定義:

首先,我們定義一下定向抓取,定向抓取是一種特定的抓取需求,目標站點是已知的,站點的頁面是已知的。本文的介紹裡面,主要是側重於如何快速構建乙個實時的抓取系統,並不包含通用意義上的比如鏈結分析,站點發現等等特性。

在本文提到的例項系統裡面,主要用到linux+mysql+redis+django+scrapy+webkit,其中scrapy+webkit作為抓取端,redis作為鏈結庫儲存,mysql作為網頁資訊儲存,django作為爬蟲管理介面,快速實現分布式抓取系統的原型。

名詞解析:

系統架構

一:儲存 redis+mysql

鏈結庫(linkbase)是抓取系統的核心,基於效能和效率的考慮,本文採用基於記憶體的redis和磁碟的mysql為主,對於linkbase主要是儲存抓取必須的鏈結資訊,比如url,anchor,等等;對於mysql,則是存放抓取的網頁,便於後續的抽取和處理。

a)      pagebase:使用mysql分庫分表,存放網頁,如下圖:

b)     linkbase     使用redis集群,儲存linkbase資訊。

二:排程模組:

排程模組是抓取系統的關鍵,排程系統的好壞決定了抓取系統的效率;這塊是主要是在redis linkbase之上的資料結構,主要有抓取佇列、抓取集合、抓取優先順序等等資料結構組成;對於乙個抓取迴圈來說:獲取url,提交到抓取模組的待抓取佇列,啟動抓取,抓取完成之後對新鏈結進行抽取,最後進入等待抓取的佇列裡面。

排程系統的基本配置:

a)     頻率(間隔多少秒)

b)     各個抓取列表的選取比例:get_detail,mod_detail,get_list,mod_list

鏈結抽取:抽取頁面的鏈結,進行除重,對於新的鏈結,插入到待抓取列表裡

內容抽取:按照模組的配置xpath,抽取頁面資訊,並寫入到pagebase中。

離線排程:按照更新的比例,從crawled_set裡面,定期選取url進入mod佇列裡面進行重新整理。

三:抓取模組:

四:配置介面:

配置介面主要是對抓取系統的管理和配置,包括:站點feed、頁面模組抽取、報表系統的反饋等等。

乙個完整的抓取資料流:

1:使用者提供種子url

2:種子url進入linkbase中新url佇列中

3:排程模組選取url進入到抓取模組的待抓取佇列中

4:抓取模組讀取站點的配置檔案,按照執行的頻率進行抓取

5:抓取的結果返回到pipeline介面中,並完成連線的抽取

6:新發現的連線在linkbase裡面進行dedup,並push到linkbase的新url模組裡面

7:排程模組選取url進入抓取模組的待抓取佇列,goto 4

8:end

系統擴充套件

本文提到的抓取系統,核心是排程和儲存模組;其中,抓取,儲存,排程都是通過資料進行互動的,因此,模組之間可以任意平行擴充套件,對於系統規模來說,只需要平行擴充套件mysql和redis儲存服務集群以及抓取集群即可。當然,簡單的擴充套件會帶來一些問題:比如垃圾列表頁的氾濫,鏈結庫的膨脹等等問題,這些問題後續在討論吧。

爬蟲資料抓包

抓包分析是爬蟲研發的最基礎和關鍵的步驟。要足夠細心和耐心,開發時應採取循序漸進的步驟,並在每個關鍵環節留有日誌輸出,方便爬蟲問題的問題跟蹤與追根溯原。accept encoding 客戶端要求伺服器返回的資料編碼格式 一般設為gzip,deflate的比較多 accept language 要求的自...

構建爬蟲系統

前面提到,我們的目標是構建乙個基於技術部落格的垂直搜尋引擎,正所謂路要一步一步走,專案也要一節一節來,本節的目的很簡單,就是帶你構建搜尋引擎的基石 可靠的爬蟲系統。爬蟲是文件的重要 所以這一節也比較重要,我會從爬蟲的基礎講起,爬蟲的構成,如何編寫爬蟲等等,希望大家能跟著文件一步步動手做下去。1.1 ...

Jmeter Ant快速構建

ant 要點 command ant p list all targets you defined 將jmeter extras目錄下的build.xml檔案copy到ant bin目錄下做一些修改可快速生成乙個build.xml檔案 build.xml中需加一行 否則會出現build.xml no...