需求分析
需求:爬取斗鱼主播图片,并下载到本地
思路:
使用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