Scrapy框架学习

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

思路:

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

  

原文地址:https://www.cnblogs.com/pythonClub/p/9856490.html