玩玩小爬蟲 試搭小架構

2021-07-29 08:27:02 字數 2258 閱讀 4462

第一篇我們做了乙個簡單的頁面廣度優先來抓取url,很顯然缺點有很多,第一:資料結構都是基於記憶體的,第二:單執行緒抓取

速度太慢,在實際開發中肯定不會這麼做的,起碼得要有序列化到硬碟的機制,對於整個爬蟲架構來說,構建好爬蟲佇列相當重要。

先上一幅我自己構思的架構圖,不是很完善,算是乙個雛形吧。

一:todo佇列和visited集合

在眾多的nosql資料庫中,mongodb還是很不錯的,這裡也就選擇它了,做集群,做分片輕而易舉。

二:**處理器

群架,鬥毆都是有帶頭的,那**處理器就可以幹這樣的事情,它的任務很簡單,

第一: 啟動時,根據我們定義好的規則將種子頁面分發到各個執行伺服器。

第二: 定時輪詢」todo——mongodb「,將讀取的新url根據規則分發到對應的執行伺服器中。

三:分發伺服器

**處理器將url分發到了執行伺服器的記憶體中,分發伺服器可以開啟10個執行緒依次讀取佇列來獲取url,然後解析url,

第一:如果url是外鏈,直接剔除。

第二:如果url不是本機負責抓取的,就放到」todo——mongodb「中。

第三:如果是本機負責的,將新提取的url放入本機記憶體佇列中。

四:**實現

待了,我要爬乙個美女**, ,申明一下,並非推廣**,看下」**處理器「的實現。

1

namespace

crawlercpu

2, stringsplitoptions.removeemptyentries)

22.tolist();

2324

factory.addrange(urls);

2526

//27

foreach (var item in

urls)

2829}30

31 console.writeline("

爬蟲 **處理器開啟,正在監視todo列表!");

3233

//開啟定時監視mongodb

34 timer timer = new

timer();

3536 timer.interval = 1000 * 10; //

10s輪詢一次

37 timer.elapsed += new

elapsedeventhandler(timer_elapsed);

38timer.start();

3940

console.read();41}

4243

static

void timer_elapsed(object

sender, elapsedeventargs e)

4470}71

}7273//

刪除mongodb中的todo表中指定資料

74mongodb.remove(urls);75}

76}77 }

接下來,我們開啟wcf服務,當然我們可以做10份,20份的copy,核心**如下:

1

///2

///開始執行任務

3///

4public

static

void

start()5"

, todoqueue.count);

2122 tasks[j] = task.factory.startnew((obj) =>

23, currenturl);27}

28}29}

30}31 }

然後我們把」分發伺服器「和」**處理器「開啟:

好了,稍等會,我們就會看到,資料已經嘩啦啦的往mongodb裡面跑了。

五:不足點

有的時候會出現某些機器非常free,而某些機器非常busy,這時就要實現雙工通訊了,當執行伺服器的記憶體佇列到達

乙個量級的時候就應該通知**處理器,要麼減緩對該執行伺服器的任務分發,要麼將任務分給其他的執行伺服器。

爬蟲管理平台以及wordpress本地搭建

各爬蟲管理平台了解 各爬蟲管理平台的本地搭建 windows下的wordpress搭建 scrapydweb 用於scrapyd實施管理的web應用程式,支援scrapy日誌分析和視覺化gerapy 基於scrapy,scrapyd,scrapyd client,scrapyd api,django...

小爬蟲系列

玩玩小爬蟲 抓取時的幾個小細節 摘要 這一篇我們聊聊在頁面抓取時應該注意到的幾個問題。一 網頁更新 我們知道,一般網頁中的資訊是不斷翻新的,這也要求我們定期的去抓這些新資訊,但是這個 定期 該怎麼理解,也就是多長時間需要抓一次該頁面,其實這個定期也就是頁面快取時間,在頁面的快取時間內我們再次抓取該網...

入門小爬蟲

python爬蟲最基本流程是,獲取請求,解析頁面,處理頁面資料 python獲取頁面的的第三方庫很多,像request,urllib,解析方法有最簡單的re正規表示式,也有專門用來解析的庫xmlx,beautifulsoup等。下面以request,正規表示式為例。一 獲取請求,得到網頁文字,先上 ...