• 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
    

      

  • 相关阅读:
    Adobe CS6 系列软件通用破解补丁 (amtlib.dll 含32位与64位)
    vs2010 快捷键大全
    js 处理json时间格式
    绑定DropDownListFor
    js插件
    NHibernate资料收集
    常用正则
    jQuery里面的datepicker日期控件默认是显示英文的,如何显示中文或其他语言呢?
    ASP.NET中使用Fusion Charts(Access+SQL)图表工具
    asp.net 2.0揭秘读书笔记二:使用Rich控件
  • 原文地址:https://www.cnblogs.com/pythonClub/p/9856490.html
Copyright © 2020-2023  润新知