2

我一直在用PHP構建一個刮板和蜘蛛,當我遇到這個設計問題時。我想知道在建立一個將抓取和抓取任務分開的系統(如大多數專業系統似乎這樣做)和蜘蛛抓取時的抓取任務之間的平衡。我唯一能想到的是,通過分割並使用一個隊列,你可以更好地平行化任務,方法是讓幾個刮刀只需要詢問隊列中的下一頁是什麼。任何人都可以想到其他的權衡,並向我解釋這些通常分爲兩個程序的主要原因?蜘蛛和刮板架構

注意:兩種情況下的抓取順序是相同的,唯一的區別是當頁面被拉出時。

+0

「這些通常分爲兩個程序的主要原因」 - 因爲它是不同的任務? – zerkms 2012-04-16 04:03:15

+0

在移動到頁面中的鏈接之前,您可以輕鬆地讓蜘蛛拉動並處理頁面,但大多數蜘蛛只是將鏈接放入另一個程序(刮板)的隊列中以便稍後進行。如果有什麼更復雜的並涉及更多的頁面請求,但這是大多數系統工作的方式。爲什麼? – hackartist 2012-04-16 04:32:18

回答

2

爬行程序檢索頁面,蜘蛛程序處理它們。如果將這些任務分開保存,則可以更改一個任務的執行而不更改其他任務。這就是它們分離的原因:它只是很好的軟件設計。你給出的例子是一個很好的例子:如果你將檢索與單個類/模塊/程序/函數/任何處理結合起來,任何頁面檢索方式的改變(例如並行檢索,通過代理檢索,等)需要重寫整個程序。

下面是另一個:如果你想處理不同類型的數據(例如rss feeds而不是html頁面),你需要從頭開始編寫整個刮板,並且不能重複在頁面檢索中做的任何工作。

+0

謝謝你的回答。我沒有想過如何在不必重寫解析邏輯的情況下使用多個頁面格式的刮板。我原本是以這種分開的方式編寫我的掃描程序,但是當爬行程序移動的速度比解析程序的速度快得多時,並且導致我的隊列備份,所以朋友曾建議我簡單地爬行並同時拉降低複雜性。我知道從概念上講,讓它們分離開發是有意義的,但我也在尋找性能方面的原因。謝謝。 – hackartist 2012-04-16 07:21:29