利用ImagePipeline来实现
from scrapy.pipelines.images import ImagesPipeline # 提供了数据下载功能
# from scrapy.pipelines.media import MediaPipeline # 提供下载视频功能
import scrapy
class imgsPipeline(ImagesPipeline): # 继承ImagesPipeline
# 更据图片地址进行请求发送
def get_media_requests(self, item, info):
# 更据图片地址发起请求
yield scrapy.Request(item["src"], meta={"item": item})
# 返回图片名称即可
def file_path(self, request, response=None, info=None, *, item=None):
# 通过request获取meta
item = request.meta['item']
filePath = item['name']
return filePath # 只需要返回图片的名字
# 将item传递给下一个即将被执行的管道类
def item_completed(self, results, item, info):
return item
这里的file_path方法要注意,只用返回文件名即可,但还需要到setting.py文件中添加文件路径配置:
IMAGES_STORE = "./imgLibs"
使用管道下载时,记得要开启管道:
如:
ITEM_PIPELINES = {
'myScrapy.pipelines.imgsPipeline': 300,
}