基于scrapy对网站的图片进行爬取

创建项目的过程我们这里就不讲了,上一篇讲了

  • ImagesPipeline特点:

    • 将下载图片转换成通用的JPG和RGB格式

    • 避免重复下载

    • 缩略图生成

    • 图片大小过滤
      在这里插入图片描述
      这里我直接给大家看一下,项目的目录结构

在爬取之前我们需要将settings里面的数据修改一下

settings.py

#在设置里面添加 不用打印所有的日志,只打印报错信息
LOG_LEVEL='ERROR'
#将这个的True改成False
ROBOTSTXT_OBEY = False
#将管道传递出去存储数据的注释打开,300是优先级,数字越小,越先执行 后面会遇到
ITEM_PIPELINES = {
   'imgPro.pipelines.imgsPileLine': 300,
}

# 指定图片存储的目录
IMAGES_STORE = './imgs_bobo'
# 过期天数
IMAGES_EXPIRES = 90  #90天内抓取的都不会被重抓

接下来就是我们写脚本的地方了

img.py

import scrapy
from imgPro.items import ImgproItem

class ImgSpider(scrapy.Spider):
    name = 'img'
    # allowed_domains = ['www.xxx.com'] 这个得注释掉
    #这是我们的目标网址
    start_urls = ['https://sc.chinaz.com/tupian/']

    def parse(self, response):
    #这里拿到图片的列表
        div_list=response.xpath('//div[@id="container"]/div')
        for div in div_list:
            #注意:使用伪属性
            src ='https:'+ div.xpath('./div/a/img/@src2').extract_first()
            #将item实例化
            itme =ImgproItem()
            #给item定义一个src的字典的键,值就是爬到的src
            itme['src'] = src
			#提交给item 管道
            yield itme

item.py

#这里面就是,你爬的数据传过来几个就写几个
 src = scrapy.Field()

这里是管道将数据传过来进行数据储存的地方
pipelines.py

# useful for handling different item types with a single interface
#这是自带的
from itemadapter import ItemAdapter

将之前的注释掉,我们自定义就好
# class ImgproPipeline:
#     def process_item(self, item, spider):
#         return item

#引入处理图片的方法
from scrapy.pipelines.images import ImagesPipeline
import scrapy

class imgsPileLine(ImagesPipeline):
    #就是可以根据图片地址进行图片数据的请求
    
    #ImagePipeline根据image_urls中指定的url进行爬取,可以通过get_media_requests为每个url直接下载
    def get_media_requests(self, item, info):
        yield scrapy.Request(item['src'])
#拿到我们在设置里面的路劲
    def file_path(self, request, response=None, info=None, *, item=None):
    #从连接中截取拿到图片的名字
        imgName = request.url.split('/')[-1]
        return imgName
        #图片下载完毕后,处理结果会以二元组的方式返回给item_completed()函数
    def item_completed(self, results, item, info):
        return item#返回给下一个即将被执行的管道类
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火浴R

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值