Scrapy框架學習 - 使用內置的ImagesPipeline下載圖片


需求分析
需求:爬取斗魚主播圖片,並下載到本地

思路:

使用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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM