[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