scrapy----下载(分类)图片

一.将图片下载到同一个文件夹中

1.novel.py

  # 需要下载的图片地址,需要是一个列表
  # 如果不下载,只是将地址保存在数据库中,不需要设置列表
   novel['img_url'] = [img_url]

2.在pipelines.py中自定义自己的pipeline

from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request
 class CustomImagesPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        # 从item中获取要下载图片的url,根据url构造Request()对象,并返回该对象
        image_url = item['img_url'][0]
        yield Request(image_url, meta={'item': item})

    def file_path(self, request, response=None, info=None):
        # 用来自定义图片的下载路径
        item = request.meta['item']
        url = item['img_url'][0].split('/')[-2]
        return '%s.jpg' % url

    def item_completed(self, results, item, info):
        # 图片下载完成后,返回的结果results
        print(results)
        return item

3.在settings中开启自己的pipeline

ITEM_PIPELINES = {
    # 启用scrapy自带的图片下载ImagesPipeline
    'scrapy.pipelines.images.ImagesPipeline': None,
     # 如果采用自定义的CustomImagesPipeline,需要将自带的ImagesPipeline设置为None。
    'NovelSpider.pipelines.CustomImagesPipeline': 1,
}

# 配置图片的保存目录
IMAGES_STORE = 'imgs'
# 在ImagesPipeline进行下载图片是,配置图片对应的Item字段
IMAGES_URLS_FIELD = 'img_url'

二.将图片分类下载(以奇书网为例)

1.在pipelines.py中自定义自己的pipeline

from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request
 class QishuImagePipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        image_url = item['img_url']
        yield Request(image_url, meta={'item': item})

    def file_path(self, request, response=None, info=None):
        item = request.meta['item']
#分类名称category_name = item['category_name']
#图片名称img_name = item['img_url'].split('/')[-1]
        path = category_name + '/' + img_name
        return path

    def item_completed(self, results, item, info):
        print(results)
        return item

2.在settings中开启自己的pipeline

ITEM_PIPELINES = {
  'Qishu.pipelines.QishuImagePipeline': 1,
  'scrapy.pipelines.images.ImagesPipeline': None,
   
}
IMAGES_STORE = 'images'
IMAGES_URLS_FIELD = 'img_url'








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值