scrapy图片的下载的整理资料

[scrapy] 2024-04-20 圈点190

摘要:scrapy图片的下载的整理资料,filepipeline,imagepipeline

scrapy图片的下载的配置步骤和思路:


1)项目的settings.py文件中,设置:

对于Images Pipeline,设置


ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}

IMAGES_STORE = '/path/to/valid/dir'

还能为下载的图片自动生成缩略图,字典类型IMAGE_THUMBS,

例如:

IMAGES_THUMBS = {

'small':(50,50),

'big':(270,270),

}

当用这个特性时,Images Pipeline将用规定的每一种尺寸生成缩率图,格式如下:

<IMAGES_STORE>/thumbs/<size_name>/<image_id>.jpg

这里:

<IMAGES_STORE>是指在settings 文件中设置的IMAGES_STORE 路径

<size_name>是指IMAGES_THUMBS的字典的键值

<image_id>是image url的SHA1 hash

例如:

<IMAGES_STORE>/full/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg

<IMAGES_STORE>/thumbs/small/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg

<IMAGES_STORE>/thumbs/big/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg


过滤小图片

当我们用Images Pipeline时,通过声明可允许的最小尺寸(设置IMAGES_MIN_HEIGHT和

IMAGES_MIN_WIDTH),过滤太小的图片。

例如:

IMAGE_MIN_HEIGHT = 110

IMAGE_MIN_WIDTH = 110

注意:这些尺寸的限制不会影响缩略图生成

默认情况下,没有限制,所有的图片都会被处理。



对于Files Pipeline,设置


ITEM_PIPELINES = {'scrapy.pipelines.files.FilesPipeline': 1}

FILES_STORE = '/path/to/valid/dir'



【备注:我们可同时使用Images Pipeline和Files Pipeline】



2,保存的方法

保存的方法有2种,1是重写函数,2是直接用指定的函数



1)重写函数


def get_media_requests(self, item, info):

    for file_url in item['file_urls']:

        yield scrapy.Request(file_url)


from scrapy.exceptions import DropItem

def item_completed(self, results, item, info):

    file_paths = [x['path'] for ok, x in results if ok]

    if not file_paths:

        raise DropItem("Item contains no files")

    item['file_paths'] = file_paths

    return item

2)是直接用指定的函数

在pipline文件中增加了image_key函数,代码如下:


def image_key(self, url):

        year,month = url.split('/')[-3],url.split('/')[-2]

        image_guid = hashlib.sha1(url).hexdigest()

        img_path = "%s/%s/%s" % (year,month,self.title)

        return '%s/%s.jpg' % (img_path, image_guid)



有这么一句话:

ImagesPipeline.image_key(url) and file_key(url) methods are deprecated, please use file_path(request, response=None, info=None) instead

也就是说,在最新版本的Scrapy中(0.22.2),使用file_path代替image_key函数。


def file_path(self, request, response=None, info=None):  

        image_guid = request.url.split('/')[-1]  

        return 'full/%s' % (image_guid)  


问题:

1,保存图片的路径地圵,如果是文章,需要替换里面的图片地圵。

2,在item中,其有两个变量,一个是images,一个是image_urls,它们的关系如何。

3,其需要pillow的支持,需要先安装一下pip install pillow

scrapy  

感谢反馈,已提交成功,审核后即会显示