2017-08-08 97 views
0

我在Scrapy + Splash中有一個可用的爬蟲。它在許多頁面上啓動了一個蜘蛛。每個頁面都包含一個鏈接列表。對於每一頁蜘蛛下載的頁面,然後,一些頁面鏈接(不遞歸)。所有頁面都保存在文件系統上。該系統完美無瑕。目前我正在重構它來添加一些數據庫交互。 我沒有使用物品,也沒有物品管道。 使用它們有什麼好處?Scrapy:爲什麼要使用管道?

添加一些信息: 我的抓取工具的目的是下載整個頁面(以html,png或使用庫轉換爲txt)。只要蜘蛛具有要保存的response,它就會將其傳遞給封裝了所有io操作(文件系統和數據庫)的庫。所以通過這種方式,它比使用項目(用於轉換的樣板)和管道更簡單。 那麼我的疑問呢? 我不知道scrapy足夠好用的方式。爬行器的實現方式是將io操作執行到蜘蛛的線程中。所以每個蜘蛛需要更長的時間來執行。如果我將io操作轉移到流水線,相反,也許(?)scrapy可以更好地安排其工作,與爬行工作分開執行。會有真正的性能差異嗎?

+1

檢查[官方文檔](https://doc.scrapy.org/en/latest/topics/item-pipeline.html)。 – Granitosaurus

+0

我紅色的官方文件呢,它不回答我的問題。我知道我可以使用Item Pipelines,它們的缺點是:它們需要一些樣板代碼,它們的優點是...什麼? – chairam

+0

如果我在蜘蛛的數據庫上寫了什麼,如果有什麼不對? – chairam

回答

1

在我看來,使用管道只是遵循separation of concerns的原則。你的蜘蛛可以做很多事情,但它的核心功能是從網頁中提取信息。其餘部分可能(也可能應該)被重構爲流水線或擴展。

如果你有一個蜘蛛網站可能不是這樣的問題。但想象一下,您有一個Scrapy項目,其中包含數百個用於語義相似的網站的蜘蛛程序,並且您希望爲每個項目應用相同的邏輯 - 獲取頁面快照,檢查重複項,存儲在數據庫等中。現在想象一下維護地獄如果你擁有每個蜘蛛的所有邏輯,並且必須改變這個邏輯。

+0

我編輯了問題 – chairam