我正在运行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'但是,对于每个产品页面,通常情况下产品页面可能包含多个产品图像。
另外如何修改管道以向修改后的图像标题添加整数值?
非常感谢任何帮助
答案 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')]