Scrapy自定义ImagePipeline - 质量设置

时间:2013-10-15 14:47:45

标签: python python-imaging-library scrapy pillow

我们的刮刀目前不仅下载文字,还下载图片。处于当前状态的刮刀工作正常,但是我们对下载图像的质量存在很大问题。 检查标准ImagePipeline后,我们实现了一个自定义的,告诉Pillow使用最高质量,它看起来像这样(并在settings.py中配置):

from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy.http import Request
from cStringIO import StringIO

class CustomImagesPipeline(ImagesPipeline):

    def convert_image(self, image, size=None):
        buf = StringIO()
        image.save(buf, 'JPEG', quality=100)
        return image, buf

我们还尝试了从此文件中获取的其他几个预设: https://github.com/python-imaging/Pillow/blob/master/PIL/JpegPresets.py

然而,我们没有看到任何改进。有人在此处理过这个问题,或者知道代码有什么问题吗?

谢谢:)

1 个答案:

答案 0 :(得分:3)

我用不同的方法解决了这个特殊的问题,这是通过最近的拉动请求来实现的,这个请求尚未被记录。

pull请求引入了一个名为FilesPipeline的新管道: https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/pipeline/files.py

我必须进行以下更改才能使其正常工作:

  • 将用于图片管道的image_urls字段重命名为file_urls
  • 中的items.py
  • 激活settings.py中的管道并定义存储空间
    • ITEM_PIPELINES = {'scrapy.contrib.pipeline.files.FilesPipeline': 1}
    • FILES_STORE = '/Users/chris/Scrapy/project/images'

除了这些更改之外,管道的工作原理与图像管道完全相同。显然,只有当您只需要原始格式的网站文件时,此方法才有效。