请选择 进入手机版 | 继续访问电脑版

笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

下载和处理文件和图像

发布者: 笨鸟自学网

Scrapy 可重复使用 item pipelines 用于下载附加到特定项目的文件(例如,当您 爬取 产品并希望在本地下载其图像时)。这些管道共享一些功能和结构(我们将它们称为媒体管道),但通常您可以使用文件管道或图像管道。

两条管道都实现了以下功能:

  • 避免重新下载最近下载的媒体

  • 指定存储媒体的位置(文件系统目录、FTP服务器、Amazon S3 bucket、Google云存储bucket)

图像管道有一些用于处理图像的额外功能:

  • 将所有下载的图像转换为通用格式(JPG)和模式(RGB)

  • 缩略图生成

  • 检查图像的宽度/高度以确保它们满足最小限制

这些管道还保留当前正在计划下载的媒体URL的内部队列,并将到达的包含相同媒体的响应连接到该队列。这样可以避免在多个项目共享同一媒体时多次下载同一媒体。

使用文件管道

使用时的典型工作流 FilesPipeline 像这样:

  1. 在spider中,您 爬取 一个项目并将所需的URL放入 file_urls 字段。

  2. 该项从spider返回并转到项管道。

  3. 当项目到达 FilesPipeline ,中的URL file_urls 使用标准的Scrapy计划程序和下载程序(这意味着计划程序和下载程序中间软件被重用)来计划下载字段,但具有更高的优先级,在其他页面被抓取之前对其进行处理。该项在特定管道阶段保持“锁定”,直到文件完成下载(或由于某种原因失败)。

  4. 下载文件时,另一个字段 (files )将用结果填充。此字段将包含一个包含有关下载文件的信息的dict列表,例如下载路径、原始的scraped url(取自 file_urls 字段),文件校验和和和文件状态。列表中的文件 files 字段将保留与原始字段相同的顺序 file_urls 字段。如果某些文件下载失败,将记录一个错误,并且该文件不会出现在 files 字段。

使用图像管道

使用 ImagesPipeline 很像使用 FilesPipeline ,但使用的默认字段名不同:您使用 image_urls 对于项目的图像URL,它将填充 images 有关下载图像的信息字段。

使用 ImagesPipeline 对于图像文件,您可以配置一些额外的功能,如生成缩略图和根据图像大小过滤图像。

图像管道需要 Pillow 4.0.0或更高版本。它用于缩略图和将图像规格化为JPEG/RGB格式。

启用媒体管道

要启用媒体管道,必须首先将其添加到项目中 ITEM_PIPELINES 设置。

对于图像管道,请使用:

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

对于文件管道,请使用:

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

注解

您还可以同时使用文件和图像管道。

然后,将目标存储设置配置为用于存储下载的图像的有效值。否则,管道将保持禁用状态,即使将其包含在 ITEM_PIPELINES 设置。

对于文件管道,设置 FILES_STORE 设置:

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

对于图像管道,设置 IMAGES_STORE 设置:

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

上一篇:调试内存泄漏下一篇:部署蜘蛛

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-2-26 18:58 , Processed in 0.015464 second(s), 17 queries .

© 2001-2020

返回顶部