首先看一下爬取的流程:
在一个爬虫里,你抓取一个项目,把其中图片的 URL 放入“image_urls”组内。项目从爬虫内返回,进入项目管道。
当项目进入ImagesPipeline,image_urls组内的 URLS 将被 Scrapy 的调度器和下载器(这意味着调度器和下载器的中间件可以复用)安排下载,当优先级更高,会在其他页面被抓取前处理。项目会在这个特定的管道阶段保持“locker”的状态,直到完成图片的下载(或者由于某些原因未完成下载)。
当图片下载完,另一个组(images)将被更新到结构中。这个组将包含一个字典列表,其中包括下载图片的信息,比如下载路径、源抓取地址(从image_urls组获得)和图片的校验码。images列表中的图片顺序将和源image_urls组保持一致。如果某个图片下载失败,将会记录下错误信息,图片也不会出现在images组中。
下载图片的item为了开启你的图片管道,你首先需要在setting中添加它ITEM_PIPELINES setting:
ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}
并将IMAGES_STORE设置为一个有效的文件夹,用来存储下载的图片。否则管道将保持禁用状态,即使你在ITEM_PIPELINES设置中添加了它。比如:
IMAGES_STORE='d:/meizitu'
图片存储在文件中(一个图片一个文件),并使用它们 URL 的SHA1 hash作为文件名。
比如,对下面的图片 URL:
http://www.example.com/image.jpg
它的 SHA1 hash 值为:
3afec3b4765f8f0a07b78f98c07b83f013567a0a
将被下载并存为下面的文件:
/full/3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg
其中:
是定义在IMAGES_STORE设置里的文件夹
full是用来区分图片和缩略图(如果使用的话)的一个子文件夹。详情参见缩略图生成。
网友评论