下载文件和图片
Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的item pipelines
。这些pipeline
有些共同的方法和结构(我们称之为media pipeline
)。一般来说你会使用Files Pipeline
或者Images Pipeline
。
一、为什么要选择使用scrapy
内置的下载文件的方法:
- 避免重新下载最近已经下载过的文件。
- 可以方便的指定文件存储的路径。
- 可以将下载的图片转换成通用的格式。比如png或jpg。
- 可以方便的生成缩略图。
- 可以方便的检测图片的宽和高,确保他们满足最小限制。
- 异步下载,效率非常高。
二、下载文件的Files Pipeline
:
当使用Files Pipeline
下载文件的时候,按照以下步骤来完成:
- 定义好一个
Item
,然后在这个item
中定义两个属性,分别为file_urls
以及files
。file_urls
是用来存储需要下载的文件的url链接,需要给一个列表。 - 当文件下载完成后,会把文件下载的相关信息存储到
item
的files
属性中。比如下载路径、下载的url和文件的校验码等。 - 在配置文件
settings.py
中配置FILES_STORE
,这个配置是用来设置文件下载下来的路径。 - 启动
pipeline
:在ITEM_PIPELINES
中设置scrapy.pipelines.files.FilesPipeline:1
。
三、下载图片的Images Pipeline
:
当使用Images Pipeline
下载文件的时候,按照以下步骤来完成:
- 定义好一个
Item
,然后在这个item
中定义两个属性,分别为image_urls
以及images
。image_urls
是用来存储需要下载的图片的url链接,需要给一个列表。 - 当文件下载完成后,会把文件下载的相关信息存储到
item
的images
属性中。比如下载路径、下载的url和图片的校验码等。 - 在配置文件
settings.py
中配置IMAGES_STORE
,这个配置是用来设置图片下载下来的路径。 - 启动
pipeline
:在ITEM_PIPELINES
中设置scrapy.pipelines.images.ImagesPipeline:1
。
四、汽车之家宝马5系高清图片下载实战
详细请见21天搞定Python分布式爬虫