Scrapy重命名图像

时间:2016-11-15 21:43:18

标签: python scrapy

我正在运行Scrapy CrawlSpider从网站下载图像。

使用管道:

import scrapy
from scrapy.pipelines.images import ImagesPipeline
from PIL import Image

class XPipeline(ImagesPipeline):

    def set_filename(self, response):
        return 'full/{0}.jpg'.format(response.meta['title'][0])

    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            yield scrapy.Request(image_url, meta={'title': item['Sku']})

    def get_images(self, response, request, info):
        for key, image, buf in super(XPipeline, self).get_images(response, request, info):
            key = self.set_filename(response)
        yield key, image, buf

当只有一个' image_urls'但是,对于每个产品页面,通常情况下产品页面可能包含多个产品图像。

另外如何修改管道以向修改后的图像标题添加整数值?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您可以在get_media_requests中的for循环中跟踪image_url和image_url的索引,并将索引追加到title,如下所示:

def get_media_requests(self, item, info):
    for i, image_url in enumerate(item['image_urls']):
        yield scrapy.Request(image_url, meta={'title_' + i: item['Sku']})

Enumerate是一个Python函数,它包装一个序列或迭代器,就像一个列表,并返回一个带有值的元组迭代器(index,list [index])。例如:

abc = ['a', 'b', 'c']
print list(enumerate(abc))
# Output: [(0, 'a'), (1, 'b'), (2, 'c')]