下载360图片(二)

编码实现

接下来,我们按照以下3步完成该项目:

              (1)创建Scrapy项目,并使用scrapy genspider命令创建Spider。

              (2)在配置文件中启用ImagesPipeline,并指定图片下载目录。

              (3)实现ImagesSpider。

1)首先创建Scrapy项目,取名为so_image,再使用scrapy genspider命令创建Spider。

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

2)在配置文件settings.py中启用ImagesPipeline,并指定图片下载目录,代码如下:

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

3)实现ImagesSpider,代码如下:

import scrapy
import json
from PIL import Image
from scrapy import Request



class ImagesSpider(scrapy.Spider):
    BASE_URL = 'http://image.so.com/zj?ch=art&sn=%s&listtype=new&temp=1'
    start_index = 0

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

    name = 'images'
    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

运行后,发现很快就结束了,查看图片下载目录download_images,发现里面什么也没有,此时查看运行结果,发现这么一段话:


在robots.txt这个文件中规定了本站点允许的爬虫机器爬取的范围,因为无论什么爬虫都被要求遵守robot协议,所以会先请求这个文件查看自己的权限,此时需要查看文件总都限制了什么。打开http://image.so.com/robots.txt网址,如下:

                                                                                     

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

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

之后删除之前爬取的结果后重新运行爬虫,就可以得到我们想要的结果了。如下为部分截图:


此代码基本适用于360图片中的所有图片的爬取。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值