1.通過scrapy內置的ImagePipeline下載圖片到本地
1.通過scrapy內置的ImagePipeline下載圖片到本地
1)在settings.py中打開 ITEM_PIPELINES 的注釋,在 ITEM_PIPELINES 中加入
ITEM_PIPELINES = {
'spider_first.pipelines.SpiderFirstPipeline': 300,
'scrapy.pipelines.images.ImagesPipeline':5, #后面的數字代表執行優先級 ,當執行pipeine的時候會按照數字由小到大執行
}
2)settings.py中加入
IMAGES_URLS_FIELD ="image_url" #image_url是在items.py中配置的網絡爬取得圖片地址
#配置保存本地的地址
project_dir=os.path.abspath(os.path.dirname(__file__)) #獲取當前爬蟲項目的絕對路徑
IMAGES_STORE=os.path.join(project_dir,'images') #組裝新的圖片路徑
還有很多設置有特殊需要的話可以用哦 (詳情可以去imagepipeine源碼查看)
IMAGES_MIN_HEIGHT=100 #設定下載圖片的最小高度
IMAGES_MIN_WIDTH=100 #設定下載圖片的最小寬度
........
可能報錯:
ModuleNotFoundError: No module named 'PIL'
安裝pillow庫即可
pip install pillow
啟動爬蟲 ,即可images文件夾下看到下載的圖片
1是下載圖片,如果想獲取圖片保存本地的地址,則需要重寫ImagesPipeline,並且在setting中調用重寫的pipeline
#既然要重寫,記得提前引入
from scrapy.pipelines.images import ImagesPipeline
class ArticleImagePipeline(ImagesPipeline):
# 重載ImagePipeline中的item_completed方法,獲取下載地址
def item_completed(self, results, item, info):
for ok,value in results: #通過斷點可以看到圖片路徑存在results內
image_file_path=value['path'] #將路徑保存在item中返回
item['front_image_path']=image_file_path
return item