item pipelines 对爬取的数据进行处理,如下载图片,保存等等
Files Pipeline 处理文件
Images Pipeline 处理图片下载
每个pipelines都需实现以下特色:
如果最近有下载记录,避免重复下载指定存储media(爬取的数据)的路径images Pipeline 增加了额外的功能:
将下载的图片转化为同一的格式JPG和RGB生成缩略图 检查图片长宽确保满足大小的限制images pipeline 提供内置的队列(当前创建下载任务—URLmedia)并保留在队列中,然后从Response中取得相同的media并连接到队列,避免多个项目(item)共享多次下载相同的media——-队列中的URL只提供一次下载
当使用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 字段中
和files类似。 使用image_url 和 images 字段 优点 : 你可设置些额外功能 ,如:产生缩略图或者过滤图片的大小
Pillow(取代PIL)使用Images Pipeline所需要的组件(产生缩略图,或者设定JPEG/RGB 格式)
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不工作 eg.1
FILES_STORE = '/path/to/valid/dir'eg.1
IMAGES_STORE = '/path/to/valid/dir'