zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    [ASP.NET]ScriptManager控件使用
    [ASP.NET]使用uploadify上传图片,并在uploadify按钮上生成预览图
    [Javascript]js判断是否为undefined类型
    [Bug]转:使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法
    [NHibernate]Nhibernate如何映射sqlserver中image字段
    远程访问CENTOS的MYSQL数据库设置
    DELPHI的一些开源项目GIT地址
    unigui导出EXCEL使用NATIVEEXCEL
    IdHTTPServer(indy10)开发REST中间件
    centos7安装MYSQL
  • 原文地址:https://www.cnblogs.com/pythonClub/p/9856490.html
Copyright © 2011-2022 走看看