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