西山小菜鸟之Scrapy学习笔记----下载文件和图片(理论部分)

前言

    本文中如有错误请指正。内容摘自书《精通Scrapy网络爬虫》

背景

    从网页中爬取信息是爬虫最典型的一种应用,除此之外 ,下载文件也是实际应用中很常见的一种需求,例如使用爬虫爬取网站中的图片、视频、WORD文档、PDF文件、压缩包等。

理论

    Scrapy 框架内部提供了两个Item Pipeline,专门用于下载文件和图片:

  • FilesPipeline
  • ImagesPipeline
        我们可以将这两个Item Pipeline看作特殊的下载器,用户使用时只需要通过item的一个特殊的字段将要下载的文件或图片的链接传递给他们,它们会自动将文件或图片下载到本地,并将下载结果信息存入item的另一个字段,以便用户在导出文件中查阅。
contentFilesPipelineImagesPipeline
导入路径scrapy.pipelines.files.FilesPipelinescrapy.pipelines.images.ImagesPileline
Item字段file_urls,filesimage_urls,images
下载目录FILES_STOREIMAGES_STORE

    ImagesPipeline在FilesPipeline的基础上针对图片增加了一些特有的功能:

  • 为图片生成缩略图
    开启该功能,只需在配置文件settings.py中设置IMAGES_THUMBS,它是一个字典,每一项的值是缩略图的尺寸,代码如下:
IMAGES_THUMBS={
   "small":(50,50),
   "big":(270,270),
}

开启该功能后,下载一张图片时,本地会出现3张图片。(1张原图,2张缩略图)。

  • 过滤掉尺寸过小的图片
    开启该功能,需要在配置文件settings.py中设置IMAGES_MIN_WIDTH和IMAGES_MIN_HEIGHT,它们分别指定图片最小的宽和高,代码如下:
IMAGES_MIN_WIDTH = 110
IMAGES_MIN_HEIGHT = 110

    开启该功能后,如果下载一张105*200的图片,该 图片会被抛弃掉,因为它的宽度不符合标准。

步骤:

  • 在配置文件settings.py中启用FilesPipeline,通常将其置于其他Item Pipeline之前:
    ITEM_PIPELINES = {‘scrapy.pipelines.files.FilesPipeline’:1}

    ITEM_PIPELINES = {‘scrapy.pipelines.images.ImagesPileline’:1}
  • 在配置文件settings.py中,使用FILES_STORE指定文件下载目录,如:
    FILES_STORE = ‘(路径)’

    IMAGES_STORE = ‘(路径)’
  • 在Spider解析一个包含文件下载链接的页面时,将所有需要下载文件的链接收集到一个列表,赋给item的file_urls字段。FilesPipeline在处理每一项item时,会读取item[‘file_urls’],对其中每一个url进行下载,代码如下:
class DownloadSpider(scrapy.Spider):
   ... 
   def parse(response):
       item = {}
       #下载列表
       item['file_urls'] = []
       #将链接赶往下载列表
       item['file_urls'].append(download_url)
       yield item

    当FilesPipeline下载完item[‘file_urls’]中的所有文件后,会将文件的下载结果信息收集到另一个列表,赋给item的files字段。下载结果信息包括:

  • Path 文件下载到本地的路径
  • Checksum 文件的校验和
  • url 文件的url地址

后语

    本篇为理论部分,后续会用两个实例介绍下载文件和下载图片的具体方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值