需求分析
需求:爬取斗魚主播圖片,並下載到本地
思路:
使用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