下載文件是一種很常見的需求,例如當你在使用爬蟲爬取網站中的圖片、視頻、word、pdf、壓縮包等的時候
scrapy中提供了FilesPipeline和ImagesPipeline,專門用來下載文件和圖片:
我們其實可以把這兩個item pipeline看成是特殊的下載器,用戶使用的時候只需要通過item的一個特殊的字段就可以將要下載的文件或者圖片的url傳遞給它們,它們會自動將文件或者圖片下載到本地,並將下載的結果信息存入到item的另一個特殊的字段,方便用戶在導出文件的時候查閱
FilesPipeline
使用FilesPipeline下載頁面中所有的PDF文件,
-
- 在配置文件settings中啟用FilesPipeline,通常將其至於其它的item pipeline的前面
- 在配置文件中settings中,使用FILES_STORE指定文件的下載目錄
- 在spider解析一個包含文件下載鏈接的頁面的時候,將所有的需要下載文件的url地址都收集到一個列表中,賦值給item的file_urls字段(item['file_urls'])。FilesPipeline在處理每一項item的時候會去讀item['file_urls'],對其中的每一個url進行下載
當FilesPipeline下載完item['file_urls']所有的文件后,會講各個文件的下載結果收集到另一個列表,賦值給item的files字段item['files']。下載的結果包括以下內容:
-
- Path:文件下載到本地的路徑(相對於FILES_STORE的相對路徑)。
- Checksum:文件的校驗
- url:文件的url地址
ImagesPipeline
圖片也是文件,所以下載圖片本質上其實也是下載文件,ImagesPipeline是FilesPipeline的子類,使用上和FilesPipeline大同小異,只是在所使用的item字段和配置選項上略有差別,
ImagesPipeline在FilesPipeline的基礎上針對圖片增加了一些特有的功能:
-
-
- 為圖片生成縮略圖
- 開啟這個功能,只需要在settings中設置IMAGES_THUMBS,它是一個字典,每一項的值都是縮略圖的尺寸
IMAGES_THUMBS = { 'small': (50, 50), 'big': (270, 270), }
- 當你下載圖片的時候,本地會出現三張圖片(一張原圖,兩張縮略圖)
- 開啟這個功能,只需要在settings中設置IMAGES_THUMBS,它是一個字典,每一項的值都是縮略圖的尺寸
- 過濾掉尺寸過小的圖片
-
-
- 開啟這個功能后,如果下載一張指定寬高的圖片,該圖片就會被拋棄掉,因為他的寬高不符合標准
- 需要在settings中配置IMAGES_MIN_WIDTH和IMAGES_MIN_HEIGHT,它們分別是指定圖片的最小寬和高
IMAGES_MIN_WIDTH = 110 IMAGES_MIN_HEIGHT = 110
-
-
- 為圖片生成縮略圖
-