scrapy画像を取り出して保存

1779 ワード

itemのurlで画像をダウンロードして保存します
from scrapy import Request
class DownloadImagesPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):  #     
        print(item)
        for image_url in item['img']:
            yield Request(image_url,
                          meta={'item': item,
                                #'index': item['image'].index(image_url)
                                })  #   meta       

    def file_path(self, request, response=None, info=None):
        item = request.meta['item']  #      meta    item
       # index = request.meta['index']  #      index                

        #      request.url.split('/')[-1]
        image_guid = request.url.split('/')[-1]
        # settings   IMAGES_STORE  +    /   
        filename = '/{0}/{1}'.format(item['title'], image_guid)
        return filename
 
    #               
    def item_completed(self, results, item, info):
        if isinstance(item, PhotoItem):
            image_paths = [x['path'] for ok, x in results if ok] # results=[(True, {'url': '...', 'path': '/.../1.jpg', 'checksum':'03d68f6ab9559687f801168609e7b336'}),]
            if not image_paths:
                print('item contains no images')
            else:
                #              
                item['image_paths'] = image_paths
                return item
        else:
            return item

settingsでの構成
# ImagePipeline       
ITEM_PIPELINES = {
    'photo.pipelines.DownloadImagesPipeline':301,
}
#        
IMAGES_STORE='F:\picture'
#     
IMAGES_EXPIRES = 90  #90           ,