網路爬蟲十三 佇列處理

2021-07-29 17:26:08 字數 793 閱讀 6469

所有的url都接受管理,並在此進行流動。url從管理模組的儲存空間開始,一直到最後輸出給磁碟上的url索引,都由此部分排程。

首先,給出url排程的一般過程,如圖所示。

其流程的各個具體操作,後面詳述。

要實現前面dns的無重複有效請求,那麼在這個部分裡設定乙個nsite類,實現這樣的功能:當乙個站點請求過dns後,就把返回的ip儲存到這個類裡,那麼再有這個站點內的url出現(網域名稱部分相同),就可以使用這個ip,而不必重複請求。

為了從乙個url中很快的找到其對應的nsite還應該設定乙個hash表,

裡面存放著所有nsite站點,這樣,乙個url可以通過採用計算其網域名稱的雜湊值就快速的找到對應的站點nsite。如:

namedsite *namedsitelist;

namedsitelist = new namedsite[記憶體中的站點數];

如果這個站點沒有請求過dns,那麼就加到乙個迴圈佇列dnssite中,隨時等待main( )中對其提出排程。如果有就轉移到ipsite中,如果這個ipsite已經加到了oksite,那麼,就把url打到tab中。隨時等待main( )排程抓取。

void push_surlqueue(surl *url)  

} url * pop_ourlqueue()

else

if (!ourl_queue.empty())

pthread_mutex_unlock(&oq_lock);

return url;

} }

十三 佇列的鏈式儲存結構

1 鏈式儲存的定義 2 基於鍊錶的實現 佇列是一種特殊的順序表,所以可以基於鍊錶來實現佇列的鏈式儲存結構!資料結構的定義 因為內部使用的是順序鍊錶,所以有如下的定義 typedef struct struct linkqueue tlinkqueuenode 部分 建立乙個佇列 如果成功,返回乙個佇...

網路爬蟲 DOM處理XML

xml有一下3個基本點 1,標籤開始和結束,2,屬性和其值,3,文字內容 例題1.通過xml找到根的名字 乙個名為book.xml的檔案 learn pythontitle 100price book learn xmltitle 80price book bookstore 通過下面的程式找出根名...

網路爬蟲異常處理總結

在進行大規模網路爬蟲的時候,經常會遇到爬了一會突然丟擲乙個錯誤來,然後整個程式就停止了執行。而我們在處於學習爬蟲初期的同胞,比如我,一旦出現程式錯誤停止,就不知道如何在修改程式後接著剛剛爬取的位置繼續爬取。就算是我們做了比較好的日誌輸出,知道是再爬取到哪一頁時出現問題,但也不得不在這一頁或者這一頁的...