西山小菜鸟之Scrapy学习笔记---下载文件和图片(下载360图片)

前言

    本文中如有错误,请指正。

背景

    前面介绍了Scrapy 下载文件、图片的理论知识,并且例举了一个下载文件的例子,本篇则以360图片的艺术分类 http://image.so.com/z?ch=art 为例,对下载图片进行实践。

码上行动

    首先打开360图片的网页,并且打开Network,清除之前的加载记录。
在这里插入图片描述
    然后慢慢向下滑直到第一次加载更多内容,点开Network中加载的网页。
在这里插入图片描述
    在新的窗口打开上述链接。可以看到返回数据为json格式,里面给出了很多信息,其中包括首页图片的下载地址。
在这里插入图片描述
    再将网页向下滑动,可以看到会加载出更多的页面,把他们请求的链接拿出来观察规律:
http://image.so.com/zj?ch=art&sn=30&listtype=new&temp=1
http://image.so.com/zj?ch=art&sn=60&listtype=new&temp=1
http://image.so.com/zj?ch=art&sn=90&listtype=new&temp=1
    其中sn表示从哪开始加载图片,每加载一次,sn数字加30,当然首页的sn=0.
    于是,我们可以通过构造这些链接来得到图片的下载地址。

  1. 配置settings.py
ITEM_PIPELINES = {
   'scrapy.pipelines.images.ImagesPipeline':1,
}

2.配置下载位置

IMAGES_STORE = 'download/images'

3.spider

class TupianSpider(scrapy.Spider):
    name = 'tupian'
    allowed_domains = ['image.so.com']
    start_urls = ['http://image.so.com/zj?ch=art&sn={}&listtype=new&temp=1']

    def start_requests(self):
        for sn in range(0,120,30):
            true_link = self.start_urls[0].format(sn)
            yield scrapy.Request(url=true_link,callback=self.parse)

    def parse(self, response):
        item = PictureItem()

        text = json.loads(response.text)
        item['image_urls'] = [per['qhimg_url'] for per in text['list']]

        yield item

4.item

class PictureItem(scrapy.Item):
    image_urls = scrapy.Field()
    images = scrapy.Field()

    这里并没有全部爬取,只是爬取了前四页的图片。
结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xue605826153/article/details/85328211