独自のImages パイプラインを作成できます。このitem_completed
方法では、ダウンロードしたすべての画像を開き、PILを使用してサイズを変更できます。Scrapy は、そのイメージング パイプラインに既に PIL を使用しています。
以下は暫定的な例です。(スクレイピーは使っていません。)
from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy.http import Request
from PIL import Image
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield Request(image_url)
def item_completed(self, results, item, info):
for result, image_info in results:
if result:
path = image_info['path']
img = Image.open(path)
# here is where you do your resizing - this method overwrites the
# original image you will need to create a copy if you want to keep
# the original.
img = img.resize((100, 72))
img.save(path)
return item
Scrapy がデフォルトの画像パイプラインで何をするかを見ることができます: https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/pipeline/images.py#L283 . そして、300 行目以下で、これら 2 つのメソッドのデフォルトの実装を読むことができます。