专栏首页小怪聊职场爬虫课堂(二十一)|使用FilesPipeline和ImagesPipeline下载文件和图片

爬虫课堂(二十一)|使用FilesPipeline和ImagesPipeline下载文件和图片

在上一章节,我们学会了使用Item Pipeline处理数据,而有时候我们可能需要下载爬虫网站中的文件信息,比如图片、视频、WORD文档、PDF文档、压缩包等。 Scrapy提供了两个Item Pipeline来下载文件和图片,它们分别是FilesPipeline和ImagesPipeline。 一、FilesPipeline和ImagesPipeline 这两个管道都实现了:

  • 避免重复下载。
  • 可以指定下载后保存的目录。

图片也是文件,下载图片本质上也是下载文件,Images Pipeline是FilesPipeline的子类,使用上和FilesPipeline差不多,只是Images Pipeline为处理图片提供了额外的功能:

  • 将所有下载的图片格式转换成普通的JPG并使用RGB颜色模式。
  • 为图片生成缩略图。
  • 检查图片的宽度和高度,过滤掉尺寸小的图片。

1、使用Files Pipeline 一般会按照下面的步骤来使用文件管道: 1)在配置文件settings.py中启用FilesPipeline。

ITEM_PIPELINES = {
    'tutorial.pipelines.files.FilesPipeline': 1,  
} 

2)在配置文件settings.py中使用FILES_STORE指定文件存储路径。

# 文件存储路径 
FILES_STORE = '/Users/huangtao/Downloads/files'  

3)实现ExampleItem(可选),在items.py定义file_urls和files两个字段。

class ExampleItem(Item):
    file_urls = Field()
    files = Field()

4)实现ExamplesSpider,设置起始爬取点。 parse方法将提取文件的下载URL并返回,一般情况下是把这些URL赋值给ExampleItem的file_urls。

# 获取360的图片信息
class SoSpider(scrapy.Spider):
    name = "so"
    allowed_domains = ["image.so.com"]

    def __init__(self, *args, **kwargs):
        super(SoSpider, self).__init__(*args, **kwargs)
        self.start_urls = ['http://image.so.com/z?ch=go']

    # 这里的parse方法将提取文件的下载URL并返回,一般情况下是把这些URL赋值给ExampleItem的file_urls。
    def parse(self, response):
        pass

2、使用Images Pipeline ImagesPipeline跟FilesPipeline的使用一样,只是使用的item字段和配置选项上有一些差别。

  • 差别一:在配置文件settings.py中导入路径不一样
ITEM_PIPELINES = {
    'tutorial.pipelines.files.FilesPipeline': 1,   # 文件 
    'tutorial.pipelines.images.ImagesPipeline': 2,   # 图片
} 
  • 差别二:在配置文件settings.py指定文件存储路径不一样
FILES_STORE = '/Users/huangtao/Downloads/files'  # 文件存储路径  
IMAGES_STORE = '/Users/huangtao/Downloads/files' # 图片存储路径
  • 差别三:在items.py定义的Item字段不一样
class ExampleItem(Item):
    # 文件
    file_urls = Field()
    files = Field()
    # 图片
    image_urls = scrapy.Field()  
    images = scrapy.Field()  

3、Images Pipeline在Files Pipeline基础上增加了一些特有的功能

  • 为图片生成缩略图 在配置文件settings.py中设置IMAGES_THUMBS,它是一个字典,每一项的值是缩略图的尺寸。
IMAGES_THUMBS = {  
    'small': (50, 50),  
    'big': (270, 270),  
} 

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

  • 检查图片的宽度和高度,过滤掉尺寸小的图片 在配置文件settings.py中设置IMAGES_MIN_HEIGHT和IMAGES_MIN_WIDTH,它们分别指定需要过滤掉的最小尺寸图片的宽和高。
IMAGES_MIN_WIDTH = 110  # 最小宽度
IMAGES_MIN_HEIGHT = 110  # 最小高度

开启这个功能后,如果下载的图片尺寸为109*200,该图片就会被抛弃,因为它的宽度不符合标准。同样的,当高度不符合时也会被抛弃。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 爬虫课程(十)|豆瓣:通过Pipeline保存数据到json文件和mysql数据库

    黄小怪
  • JVM第一篇:一个Java内存泄漏的排查案例

    黄小怪
  • Jenkins+Git+Maven+Tomcat8配置web自动构建环境(拉代码、编译、打包、部署)

    黄小怪
  • Kubernetes中Pod的健康检查

    我们先来看一下Kubernetes的架构图,每个Node节点上都有 kubelet ,Container Probe 也就是容器的健康检查是由 kubelet ...

    大江小浪
  • 【算法】k均值和层次聚类

    小编邀请您,先思考: 1 聚类算法有什么应用? 2 如何做聚类? 看看下面这张图,有各种各样的虫子和蜗牛,你试试将它们分成不同的组别? ? 完成了吗?尽管这里并...

    陆勤_数据人网
  • 量化投资里的无监督学习算法:聚类

    公众号第一次介绍Marcos Lopez de Prado,则是来自他一篇论文:《The 7 Reasons Most Machine Learning Fun...

    量化投资与机器学习微信公众号
  • 【无监督学习】DBSCAN聚类算法原理介绍,以及代码实现

    主要包括:K-means、DBSCAN、Density Peaks聚类(局部密度聚类)、层次聚类、谱聚类。

    IT派
  • R聚类算法-(K-Means算法)

    聚类算法,属于无监督学习 K-Means算法 K-Means算法的目标,是把n个样本点划分到k个类中,使得每个点都属于离它最近的质心对应的类,以之作为聚类的标准...

    Erin
  • 机器学习|聚类(下)

    接下来几周的时间,我们将会推出关于《西瓜书》读书笔记的连载文章,updating~

    数据山谷
  • canvas知识点

    HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形...

    HUC思梦

扫码关注云+社区

领取腾讯云代金券