说明
上一个案例,对自带的 ImagePipeline
写了一个图片下载案例,现在对最后的小结进行改进
- 对图片进行进行自定义名称存储
主要涉及 ImagePipeline类的继承与方法的重写
优化开始
优化 Wallpaperspider.py 文件
def parse(self, response): # 循环 li 标签 for urltag in response.xpath('//ul[@class="clearfix"]/li/a'): # 获取 图片标题 titles = urltag.xpath('./img/@alt').get() # 获取 图片链接 url = urltag.xpath('./img/@src').get() # --> 没有 http:// 的链接 urls_pic = response.urljoin(url) # 拼接URL # 传给数据 Item yield ImagesappItem(titles= titles, image_urls= urls_pic)
优化 pipeline.py 文件
继承 ImagePipeline 类
导入 ImagesPipeline 类
from scrapy.pipelines.images import ImagesPipeline
继承 ImagesPipeline 类
class PicImagesPipeline(ImagesPipeline): pass
重写 get_media_requests() 方法
此方法是构造请求的Ruquest对象
# 构造下载 ,首先调用的函数 def get_media_requests(self, item, info): # 导入 Request 模块 from scrapy.http.request import Request # 在 item 中取出 url ,再把 item 给 meta参数进行传递 # 在后面方法中,可以从 request对象的meta属性 获得 item 的数据 yield Request(url=item['image_urls'],meta={'item':item})
重写 file_path() 方法
此方法是返回存储的路径
def file_path(self, request, response=None, info=None): # 从 request 对象的meta属性 获取 title title = request.meta['item']['titles'] # 构造存储路径 path = title +'.jpg' return path
修改 settings.py 文件
因为使用了自定义的 Pipeline,所以我们需要指定我们重写的 Pipeline
# Configure item pipelines # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'ImagesApp.pipelines.PicImagesPipeline':1, # 继承的重写 ImagesPipeline 类 }
运行爬虫
scrapy crawl WallPaperSpider
版权声明:《 Scrapy框架下载图片案例的改进版 》为明妃原创文章,转载请注明出处!
最后编辑:2019-12-7 13:12:44