Scrapy圖檔(檔案)下載下傳
這裡介紹的是Scrapy架構自帶的圖檔(檔案)下載下傳功能
一: 初步了解在Scrapy架構的源碼中下載下傳圖檔的檔案
--->
--->
在這個.py檔案中
代碼第69行是: 圖檔根據哪個屬性下載下傳
代碼第97行是: 圖檔存放的路徑
這裡隻是簡單的了解一些scrapy圖檔下載下傳的一些操作(其它源碼自行百度)
************************重新/自定義***********************
二: 當圖檔爬蟲代碼邏輯寫完整之後
在
檔案内
定義下載下傳圖檔的Imagepipeline(與下載下傳檔案的FilesPipeline邏輯一樣)
"""
邏輯:
1. 引入scrapy自帶的ImagesPipeline
from scrapy.pipelines.images import ImagesPipeline
2. 建立類, 繼承自ImagesPipeline
class Custom(定制的)ImagePipeline(ImagesPipeline):
3. 重寫get_media_requests函數, 在函數中循環擷取圖檔位址, 建立Request, 并且将item作為request.meta中參數, 傳遞到file_path函數中, 傳回存放request對象的清單
def get_media_requests(self, item, info):
return[Request(x, meta={'item': item}) for x in item['img_src']]
4. 重寫file_path函數, 擷取到request.meta中的item對象, 提取分類名稱, 拼接完整的存放路徑, 并且傳回路徑
def file_path(self, request, response=None, info=None):
item = request.meta['item']
xxx = item['xxx'](xxx儲存檔案夾名稱和圖檔名)
path = xxx+'/'+'xxx'+'.jpg'
return path
5. 在
中的ITEM_PIPELINES配置該類路徑, 設定優先級, 配置IMAGES_URLS_FIELD, IAMGES_STORE
# 配置根據item的哪個屬性下載下傳圖檔
IMAGES_URLS_FIELD = 'img_src'
# 配置圖檔存放的目錄
IAMGES_STORE = 'datas'
"""
img_src是下載下傳圖檔的連結
這樣就行運作Scrapy架構圖檔下載下傳
注意: 1.隻有這樣也是不行的, 還要先将items.py檔案配置好
關于這個請看部落格的其它内容
2. 儲存圖檔的屬性必須是個清單, 不然會抛出異常
事例:
src: 是圖檔的屬性接收的變量名