您的位置:首页 > 其它

Scrapy学习笔记九--Downloading and processing files and images

2017-04-13 16:01 405 查看
item pipelines 对爬取的数据进行处理,如下载图片,保存等等

Files Pipeline 处理文件

Images Pipeline 处理图片下载

每个pipelines都需实现以下特色:

如果最近有下载记录,避免重复下载

指定存储media(爬取的数据)的路径

images Pipeline 增加了额外的功能:

将下载的图片转化为同一的格式JPG和RGB

生成缩略图

检查图片长宽确保满足大小的限制

images pipeline 提供内置的队列(当前创建下载任务—URLmedia)并保留在队列中,然后从Response中取得相同的media并连接到队列,避免多个项目(item)共享多次下载相同的media——-队列中的URL只提供一次下载

Using the Files Pipeline (下载文件)

当使用FilesPipeline流程是这样的:

通过spider爬取数据item,并把它放入file_urls字段中

spider 返回item 并传入 item pipeline

当item传入FilesPipeline,file_urls字段中URL就要被安排进行下载,这个过程中scrapy的调度程序(Scheduler)和下载器(downloader)发挥作用(此过程中Scheduler和Downloader会被重复调用),他们具有较高的优先级,会在爬取其他pages前执行, item会保持‘lock’状态直到下载完成或者因为其他原因失败

当所有files都下载完成,可以把结果填充在其他的field中(如 files)。另外this field 会把下载的文件信息,如下载地址,从file_url中取出的原始URL或者file checksum保存在一组字典容器中。如果下载过程中出错,会产生错误日志,下载的文件不会呈现在 files 字段中

Using the Images Pipeline (下载图片)

和files类似。 使用image_url 和 images 字段

优点 : 你可设置些额外功能 ,如:产生缩略图或者过滤图片的大小

Pillow(取代PIL)使用Images Pipeline所需要的组件(产生缩略图,或者设定JPEG/RGB 格式)

Enabling your Media Pipeline (如何使pipeline生效)

1.要使你的media pipeline生效需要对你项目中 "ITEM_PIPELINES setting" 进行配置 :

eg.1

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


eg.2

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


2.完成1步骤后,需设置有效路径保存下载结果。未设置时,media_pipeline不工作
4000

eg.1

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


eg.1

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


Supported Storage

File system storage

使用SHA1 hash作为文件的名字

< IMAGES_STORE >/full/3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg   #<IMAGES_STORE> 是在IMAGES_STORE setting 定义的
#full 是子目录将完整图片和缩略图区分开


待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: