2013-10-15 35 views
0

我們的刮板目前不僅下載文本,而且還下載圖像。目前狀態下的刮刀工作正常,但是我們對下載圖像的質量存在很大的問題。 檢查標準ImagePipeline後,我們實現了一個自定義的,它告訴枕頭使用最高質量的,它看起來像這樣(在settings.py配置):Scrapy自定義ImagePipeline - 質量設置

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

有[封閉公關](https://github.com/scrapy/scrapy/pull/250)我前一段時間打開,增加了選項* *不*轉換下載的圖像。如果這是您需要的,請在修改的字段中查找「ORIGINAL_SAVE」。 ImagePipeline已經改變了,但我計劃打開一個新的公關再次推薦它。 –

+0

保羅,謝謝你的提示。實際上,我發現了另一個最近合併的PR,尚未記錄。我很快就會爲此添加一個答案。 – herrherr

+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'
從這些變化的管道工程完全一樣的圖像流水線

分開。顯然這種方法只適用於你只需要原始格式的網站文件。