24. Scrapy 框架-圖片管道使用
Scrapy提供了一個 item pipeline ,來下載屬于某個特定項目的圖片,比如,當(dāng)你抓取產(chǎn)品時,也想把它們的圖片下載到本地。
這條管道,被稱作圖片管道,在 ImagesPipeline
類中實現(xiàn),提供了一個方便并具有額外特性的方法,來下載并本地存儲圖片:
將所有下載的圖片轉(zhuǎn)換成通用的格式(JPG)和模式(RGB)
縮略圖生成
檢測圖像的寬/高,確保它們滿足最小限制
這個管道也會為那些當(dāng)前安排好要下載的圖片保留一個內(nèi)部隊列,并將那些到達(dá)的包含相同圖片的項目連接到那個隊列中。 這可以避免多次下載幾個項目共享的同一個圖片
2. 使用圖片管道
當(dāng)使用 ImagesPipeline ,典型的工作流程如下所示:
在一個爬蟲里,你抓取一個項目,把其中圖片的URL放入 image_urls 組內(nèi)
項目從爬蟲內(nèi)返回,進(jìn)入項目管道
當(dāng)項目進(jìn)入 ImagesPipeline,image_urls 組內(nèi)的URLs將被Scrapy的調(diào)度器和下載器(這意味著調(diào)度器和下載器的中間件可以復(fù)用)安排下載,當(dāng)優(yōu)先級更高,會在其他頁面被抓取前處理。項目會在這個特定的管道階段保持“l(fā)ocker”的狀態(tài),直到完成圖片的下載(或者由于某些原因未完成下載)。
當(dāng)圖片下載完,另一個組(images)將被更新到結(jié)構(gòu)中。這個組將包含一個字典列表,其中包括下載圖片的信息,比如下載路徑、源抓取地址(從 image_urls 組獲得)和圖片的校驗碼。 images 列表中的圖片順序?qū)⒑驮?image_urls 組保持一致。如果某個圖片下載失敗,將會記錄下錯誤信息,圖片也不會出現(xiàn)在 images 組中
3. 具體流程(此處以zol網(wǎng)站為例)
定義item

2.編寫spider
思路:獲取文件地址-->獲取圖片名稱-->推送地址
此處是一張一張的推送

3.編寫pipline
以下如果不想改文件名,meta屬性可以忽略不寫
? ??


IMAGES_STORE = "e:/pics"