Scrapy ImagesPipeline下载图片

news2024/12/24 8:38:53

一、  ImagesPipeline是啥

      ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)。

二、ImagesPipeline优势:

  1. 将下载图片转换成通用的jpg和rgb格式
  2. 避免重复下载
  3. 缩略图生成
  4. 图片大小过滤
  5. 异步下载

三、ImagesPipeline工作流程

  • 爬取一个item,将图片的urls放入image_urls字段
  • 从spider返回的item,传递到item pipeline
  • 当item传递到imagepipeline,将调用scrapy 调度器和下载器完成image_urls中的url的调度和下载。
  • 图片下载成功结束后,图片下载路径、url和校验和等信息会被填充到images字段中。

四、使用ImagesPipeline下载美女整页的图片

    (1) 网页分析

 

 详情页的信息

(2) 创建项目

    scrapy startproject Uis
    cd Uis
    scrapy genspider -t crawl ai_img xx.com

 (3) 修改setting.py文件

        USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
        ROBOTSTXT_OBEY = False
        DOWNLOAD_DELAY = 1

(4)  编写spider的文件ai_img.py

    首先 查看ImagesPipeline源文件

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

from ..items import *


class AiImgSpider(CrawlSpider):
    name = "ai_img"
    allowed_domains = ["netbian.com"]
    start_urls = ["http://www.netbian.com/mei/index.htm"]  # 起始url

    rules = (
        Rule(LinkExtractor(allow=r"^http://www.netbian.com/desk/(.*?)$"),  #详情页的路径
             callback="parse_item", follow=False),)

    def parse_item(self, response):
        #创建item对象
        item =UisItem()

        # 图片url ->保存到管道中 是字符串类型
        url_=response.xpath('//div[@class="pic"]//p/a/img/@src').get()

        #图片名称
        title_=response.xpath('//h1/text()').get()

        # 注意:必须是列表的形式
        item['image_urls']=[url_]
        item['title_']=title_

        return item

(5) 编写item.py文件

class UisItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()

    #默认字段image_urls,查看源码
    image_urls=scrapy.Field()
    title_=scrapy.Field()
    pass

(6)编写管道pipelines.py

    首先 查看ImagesPipeline源文件

   1) 默认保存的文件夹

  2)获取Item对象

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
import hashlib

from itemadapter import ItemAdapter
from scrapy import Request
from scrapy.pipelines.images import ImagesPipeline
from scrapy.utils.python import to_bytes

#继承ImagesPipeline
class UisPipeline(ImagesPipeline):

    # 重写1:直接修改默认路径
    # def file_path(self, request, response=None, info=None, *, item=None):
    #     image_guid = hashlib.sha1(to_bytes(request.url)).hexdigest()
    #     # 修改默认文件夹路径
    #     return f"desk/{image_guid}.jpg"


    #重写2:需要修改文件夹和文件名
    def file_path(self, request, response=None, info=None, *, item=None):
        #获取item对象
        item_=request.meta.get('db')
        #获取图片名称
        image_guid = item_['title_'].replace(' ','').replace(',','')
        print(image_guid)
        # 修改默认文件夹路径
        return f"my/{image_guid}.jpg"

    # 重写-item对象的图片名称数据
    def get_media_requests(self, item, info):
        urls = ItemAdapter(item).get(self.images_urls_field, [])
        # 传递item对象
        return [Request(u, meta={'db':item}) for u in urls]

 (7)设置settings.py ,开启图片管道

ITEM_PIPELINES = {
    #普通管道
   # "Uis.pipelines.UisPipeline": 300,
   # "scrapy.pipelines.images.ImagesPipeline": 301, #图片的管道开启
    "Uis.pipelines.UisPipeline": 302,  #自定义图片的管道开启
}

# 保存下载图片的路径
IMAGES_STORE='./'

 (8) 运行: scrapy crawl ia_img

 (9)成果展示

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Echarts构建指定省份的地图

1. 自行准备好Echarts环境 Echarts官网:https://echarts.apache.org/zh/index.html 2. 下载需要的省份或者城市的json地理信息文件 下载我们需要显示地区的Json数据,这个Json数据用于Echart的地图显示 例如我这里是下载的:湖南、湖北、四川…

同步模式之顺序控制线程执行

tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 文章目录 一、同步模式之顺序控制线程执行二、代码样例三、三个线程分别输出a、b、c,按顺序输…

作为一个项目管理成员,怎样才能有效监控项目执行?

作为一个项目管理成员,有效监控项目执行是确保项目成功的关键。在项目执行期间,您需要密切关注项目进展,并及时采取行动来纠正任何偏差。以下是几个有效的方法,可以帮助您监控项目执行并确保项目按计划顺利进行。 1. 制定详细的项…

C语言进阶--数据的存储

目录 数据类型介绍 基本内置类型: 类型的意义: 类型的基本归纳: 整型在内存中的存储 原码,反码和补码: 大小端存储模式: 大小端产生原因: 浮点型在内存中的存储 数据类型介绍 基本内…

六、机械手的种类

机械手是机器人能够完成指令的一个重要输出装置,机器臂是否合理、有效,决定了机 器人能否发挥出应有的作用。 机械手是一种能模仿人手和臂的某些动作功能,用以按固定程序抓取、搬运物件或操作工具的自动操作装置。特点是可以通过编程来完成各…

wy的leetcode刷题记录_Day68

wy的leetcode刷题记录_Day68 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2023-6-6 前言 目录 wy的leetcode刷题记录_Day68声明前言1019. 链表中的下一个更大节点题目介绍思路代码收获 1019. 链表中的下一个更大节点 2352. 相等行列…

CPU、内存、缓存的关系

术语解释 (1)CPU(Central Processing Unit) 中央处理器 (2)内存 内存用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,内存的运行决定…

Docker容器管理

docker容器相当于一个进程,性能接近于原生,几乎没有损耗; docker容器在单台主机上支持的数量成百上千; 容器与容器之间相互隔离; 镜像是创建容器的基础,可以理解镜像为一个压缩包 docker容器的管理 容…

深耕电力行业,百度智能云助力电厂节煤降耗

山西省吕梁市汾阳市三泉镇,晋能集团旗下山西国峰煤电有限责任公司的两台300MW循环流化床直接空冷机组正在运行,燃煤通过传送带进入锅炉燃烧,将水加热成高温高压蒸汽,用以推动汽轮机拖动发电机旋转发电,支撑工业生产、点…

CW32-Template CW32F030开发板工程模板

国产MCU Embedded-CW32-Board-Template Embedded-CW32-Board-Template CW32-Template第三方资源集合 CW-Template CW32开发者开发板资料 CW32-Board 开发板资料 合集 官方提供的案例Examples CW32F030_StandardPeripheralLib\Examples CW32-48F大学计划板例程 EX1流…

优思学院|精益和六西格玛都强调的一件东西...

精益和六西格玛有着诸多不同,它们的方法和理念也不尽相同,但却有一件东西,是他们的共同理念和工具,那就是----标准。 标准,是企业管理中至关重要的一环。标准,不仅指导着我们对人、物和流程的处理方式&…

2023年鄂州中级职称水测考试什么时候考试?

今天鄂州中级职称水测考试开始打印准考证了,但是只能打印部分专业的水测准考证,按照专业,按照批次打印的。 具体通知如下: 各位考生: 为积极稳妥做好我市晋升中、初级专业技术职称综合系列水平能力测试工作,现按专业分…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 37页论文及代码

相关信息 (1)建模思路 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建…

2023BR软件、Adobe Bridge下载、安装教程

最后附下载地址 Adobe Bridge CS5 软件是一款功能强大的媒体管理器,它允许您集中访问所有创作资源。 功能介绍 1、可以方便地访问本地PSD、AI、INDD 和 Adobe PDF 文件以及其它 Adobe 和非 Adobe 应用程序文件。 2、可以将资源按照需要拖移到版面中进行预览&…

安卓平台下的即时通讯技术深入解析【实时聊天应用开发实战】

摘要: 本文将详细介绍如何使用安卓开发技术实现一个实时聊天应用。我们将通过构建一个基于安卓平台的聊天应用,演示如何处理用户注册、登录、消息发送和接收等关键功能。文章将涵盖安卓开发的各个方面,包括用户界面设计、后端服务器搭建、网络通信、数据存储和安全性等。读…

spring6

Spring6 1、概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的 开发。从简…

【Mysql数据库从0到1】-入门基础篇--数据库了解

【Mysql数据库从0到1】-入门基础篇--数据库了解 🔻一、数据库产生背景🔻二、数据库有关概述🔻三、数据库访问接口🔻四、数据库种类🔻五、数据库有关术语🔻六、常见DBMS排名🔻七、常见数据库介绍…

(三)PUN 2核心内容(待更新)

一、实例化 大多数多人游戏需要创建和同步一些游戏对象。也许它是一个角色、一些单位或怪物,应该出现在房间内的所有客户端上。 PUN 提供了一种方便的方法来做到这一点。 与 Unity 中一样,Instantiate 和 Destroy 用于管理 GameObjects 的生命周期。 PU…

令人惊艳的高效算法盘点(附示例)

令人惊艳的高效算法盘点(附示例) 在计算机科学领域,算法是解决问题的基石。有些算法,因为其高效性和惊人表现,令人瞩目。本文将为你介绍一些令人惊艳的高效算法,让我们一起来领略这些算法的魅力吧&#xf…

Cesium 热力图

var points []; var width 600; var height 400; var max 100; // 热力图经纬度范围 var latMin 28.364807; var latMax 40.251095; var lonMin 94.389228; var lonMax 108.666357; // 根据热力图图片范围&#xff0c;生成随机热力点和强度值 for (var i 0; i < 30…