Scrapy 使用内置的ImagesPipeline下载图片

转自:https://www.cnblogs.com/pythonClub/p/9856490.html

官网地址:https://docs.scrapy.org/en/latest/topics/media-pipeline.html

需求分析
需求:爬取斗鱼主播图片,并下载到本地

思路:

使用Fiddler抓包工具,抓取斗鱼手机APP中的接口
使用Scrapy框架的ImagesPipeline实现图片下载
ImagesPipeline实现图片下载的使用方法:

在items中的XxxItem中定义 image_urls 和 images字段
在spider中将提取出来的图片链接保存到Item的 image_urls 字段中(注意:该字段接收一个可迭代对象,否则报错)
在settings文件中进行配置,具体配置见 settings.py 文件

 

items.py

class DouyuMeiziItem(scrapy.Item):

    """斗鱼妹子爬虫Item"""



    image_urls=scrapy.Field()

    images=scrapy.Field()


spider.py  

# !/usr/bin/env python

# -*- coding:utf-8 -*-



import json

import scrapy

from myscrapy.items import DouyuMeiziItem





class DouyuMeiziSpider(scrapy.Spider):

    """

    爬取斗鱼直播平台中的主播信息

    练习:

        1. 手机APP抓包(获取json数据API接口)

        2. 用Scrapy进行图片下载的方法

    """



    name = 'douyuzhubo'

    allowed_domains=['douyucdn.cn',]



    offset=0

    base_url='http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset='

    start_urls=[base_url+str(offset),]



    def parse(self, response):

        # 获取响应内容,字符串

        content=response.text

        data=json.loads(content)['data']



        for i in data:

            # 图片链接

            image_url=i['vertical_src']



            item=DouyuMeiziItem()

            # 该字段必须是图片链接的可迭代对象,否则报错

            item['image_urls']=[image_url]

            yield item



        if self.offset<230:

            self.offset+=20

            yield scrapy.Request(url=self.base_url+str(self.offset),callback=self.parse)


settings.py  

ITEM_PIPELINES = {

    # 引入Scrapy提供的ImagesPipeline组件

    'scrapy.pipelines.images.ImagesPipeline': 300,

}

# ImagesPipeline辅助配置项

# 图片存储路径(绝对路径 or 相对路径)

IMAGES_STORE = 'data/斗鱼主播图片/'

# 该字段的值为XxxItem中定义的存储图片链接的image_urls字段

IMAGES_URLS_FIELD='image_urls'

# 该字段的值为XxxItem中定义的存储图片信息的images字段

IMAGES_RESULT_FIELD='images'

# 生成缩略图(可选)

IMAGES_THUMBS = {

    'small': (50, 50),

    'big': (270, 270),

}

# 过期时间,单位:天(可选)

IMAGES_EXPIRES = 120

# 过滤小图片(可选)

# IMAGES_MIN_HEIGHT = 110

# IMAGES_MIN_WIDTH = 110

# 是否允许重定向(可选)

# MEDIA_ALLOW_REDIRECTS = True

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值