下载360图片

好久没写了,可不能生疏了,这次我们爬取360图片~

就爬个妹子的图吧,网址在此,
http://image.so.com/z?ch=wallpaper&t1=93

F12看网络请求,随着鼠标往下往下滚动,发现加载了很多的图片,以及最重要的,jQuery发送的请求,其响应结果是一个json

这里写图片描述
这里写图片描述

可以看到发送请求的额url:
http://image.so.com/zj?ch=wallpaper&t1=93&sn=30&listtype=new&temp=1
返回的结果也可以看到,是一段json,当然复制这个链接浏览器打开也是一样的,观察json可以发现图片的url,也就是下载地址

接着往下滚动,获取更多jQuery发送的请求

http://image.so.com/zj?ch=wallpaper&t1=93&sn=30&listtype=new&temp=1
http://image.so.com/zj?ch=wallpaper&t1=93&sn=60&listtype=new&temp=1
http://image.so.com/zj?ch=wallpaper&t1=93&sn=90&listtype=new&temp=1
http://image.so.com/zj?ch=wallpaper&t1=93&sn=120&listtype=new&temp=1

经过观察,可以总结出这些url的规律:

  • ch参数 分类标签
  • sn参数 从第几张图片开始加载

分析的差不多了## 开工

1. 创建项目

这个就没啥说的了

scrapy startproject so_image
cd so_image
scrapy genspider images image.so.com

2. 在配置文件中启用ImagesPipeline

在配置文件settings.py中启用ImagesPipeline,并指定图片下载目录

ITEM_PIPELINES = {
   # 'so_image.pipelines.SoImagePipeline': 300,
    'scrapy.pipelines.images.ImagesPipeline':1,
}
IMAGES_STORE = 'download_images'

3, 实现Spider

# -*- coding: utf-8 -*-
import scrapy
import json

from scrapy import Request


class ImagesSpider(scrapy.Spider):
    name = 'images'
    allowed_domains = ['image.so.com']

    BASE_URL = 'http://image.so.com/zj?ch=wallpaper&t1=93&sn=%s&listtype=new&temp=1'
    start_index = 0

    # 限制最大数据量,防止磁盘爆炸
    MAX_DOWNLOAD_NUM = 1000

    start_urls = [BASE_URL % 0]

    def parse(self, response):
        infos = json.loads(response.body.decode('utf-8'))
        # 提取所有图片下载url到一个列表,赋给item的'image_urls'字段
        yield {'image_urls':[info['qhimg_url'] for info in infos['list']]}

        # 如果count字段大于0,并且下载数量不足MAX_DOWNLOAD_NUM,继续获取下一页图片信息
        self.start_index += infos['count']
        if infos['count'] >0 and self.start_index<self.MAX_DOWNLOAD_NUM:
            yield Request(self.BASE_URL % self.start_index)

运行爬虫

scrapy crawl images

这里出现了问题,提示了这么一句话:

rawled (200) <GET http://image.so.com/robots.txt> (referer: None)
DEBUG: Forbidden by robots.txt: <GET http://image.so.com/zj?ch=wallpaper&t1=93&sn=0&listtype=new&temp=1>

robots.txt这个文件中规定了本站点允许的爬虫机器爬取的范围(比如你不想让百度爬取你的页面,就可以通过robot来限制),因为默认scrapy遵守robot协议,所以会先请求这个文件查看自己的权限,那我们打开这个robots.txt看看他写了啥

User-agent: *
Disallow: /j?
Disallow: /i?
Disallow: /z?
Disallow: /zv?
Disallow: /zj?

可以看到,robots.txt文件不让我们爬取我们想要的数据,所以我们在setting改变ROBOTSTXT_OBEY为False,让scrapy不要遵守robot协议,之后就能正常爬取了。

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

重新爬取就可以得到我们要的图片了
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值