您可以創建自己的Images pipeline。在item_completed
方法中,您可以打開所有下載的圖像並使用PIL調整它們的大小。 Scrapy已經爲其成像管線使用了PIL。
這裏是一個試驗性的例子。 (我不使用Scrapy。)
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行以下,您可以閱讀這兩種方法的默認實現。
我正在使用scrapy將圖像上傳到amazon s3,所以我沒有選擇在本地調整它們的大小。 – Vanddel 2013-05-19 11:51:13
圖像只是字節。您可以在將其發送到亞馬遜S3之前在內存中對其進行修改。 – 2013-05-19 12:30:16