Scrapy_使用_自定义ImagePipeline,自定义图片名

目录

一、基本使用

二、自定义ImagesPipeline类

参考网站:https://www.osgeo.cn/scrapy/topics/media-pipeline.html#using-the-images-pipeline

一、基本使用

1、创建项目

 2、提取图片地址

这里我们需要注意的有两点

image_urls这个字典名字在这里是默认的

url_list的数据类型是list(列表)类型,所以说如果你提取的是一张图片的地址,记得[url_list]变成列表类型

import scrapy


class ZolSpider(scrapy.Spider):
    name = "zol"
    allowed_domains = ["zol.com"]
    # 这个是我们演示的目标网站
    start_urls = ["https://desk.zol.com.cn/bizhi/10008_119950_2.html"]

    def parse(self, response):
        # 我们以xpath作为信息筛选的方式
        url_list = response.xpath("//*[@id='showImg']/li/a/img/@src").getall()

        return {'image_urls':url_list}
    

from scrapy.pipelines.images import ImagesPipeline

3、配饰settings.py 

 注释掉这一段

# ROBOTSTXT_OBEY = True

开启通道,配置图片存储位置

ITEM_PIPELINES = {
#    "Scrapy_ImagePipeline.pipelines.ScrapyImagepipelinePipeline": 300,
   "scrapy.pipelines.images.ImagesPipeline":300
}

IMAGES_STORE = "E:\CS\demo\Scrapy_ImagePipeline\Scrapy_ImagePipeline\spiders\imgs"

5、创建脚本文件执行

from scrapy.cmdline import execute

execute(['scrapy','crawl','zol'])

执行后的结果为

二、自定义ImagesPipeline类,自定义图片名保存

1、获取图片名字,我们再原有的代码上添加就好

import scrapy


class ZolSpider(scrapy.Spider):
    name = "zol"
    allowed_domains = ["zol.com"]
    # 这个是我们演示的目标网站
    start_urls = ["https://desk.zol.com.cn/bizhi/10008_119950_2.html"]

    def parse(self, response):
        # 我们以xpath作为信息筛选的方式
        url_list = response.xpath("//*[@id='showImg']/li/a/img/@src").getall()
        url_name = response.xpath('//*[@id="showImg"]/li/i/em/text()').getall()
        for url,name in zip(url_list,url_name):
            yield {'image_urls':[url],"image_name":name}
    

from scrapy.pipelines.images import ImagesPipeline

2、自定义ImagesPipeline

from scrapy.pipelines.images import ImagesPipeline

class Myimgfile(ImagesPipeline):
    # 这个函数用于修改图片地址传递时的key
    def get_media_requests(self, item, info):
        return super().get_media_requests(item, info)
    # 此函数用于修改保存图片时修改图片名
    def file_path(self, request, response=None, info=None, *, item=None):
        name = item.get("image_name")
        return f'myfiles/{name}.jpg'

3、修改通道

ITEM_PIPELINES = {
#    "Scrapy_ImagePipeline.pipelines.ScrapyImagepipelinePipeline": 300,
   "Scrapy_ImagePipeline.pipelines.Myimgfile": 300,
#    "scrapy.pipelines.images.ImagesPipeline":300,
}

4、开始爬取,最后结果

这里我们关注的也是左侧的文件名和地址

补充:

1、需要安装pillow4.0.0以上版本

pip install pillow==9.2.0

2、这里我获取的都是多条数据,如果获取一条数据,则需要适当修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值