【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

news2024/9/22 1:27:37

基于Scrapy框架的图片管道实现图片抓取

前言

本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取,并以抓取 360 图片为例进行展示。

正文

1、Scrapy框架抓取图片原理

利用 Scrapy 框架提供的图片管道类 ImagesPipeline 抓取页面图片,在使用时需要导入,并且重新 get_media_requests() 方法,如果对保存的文件名有要求,则需要重写 file_path() 方法,在 settings.py 文件中的 IMAGES_STORE 属性可以设置文件保存路径。

from scrapy.pipelines.images import ImagesPipeline

2、Scrapy框架抓取图片实现步骤

  1. 爬虫文件:将图片链接提取出来直接 yield 交给管道文件处理;

  2. 管道文件:导入并继承 scrapy 的 ImagesPipeline 类,重写get_media_requests() 方法 和 file_path() 方法;

    from scrapy.pipelines.images import ImagesPipeline
     class XxxPipeline(ImagesPipeline)def get_media_requests(self,xxx):
            pass
        def file_path(self,xxx):
            #处理文件名
            return filename
    
  3. settings.py:在全局配置文件中,通过 IMAGES_STORE =“路径” 指定文件保存的位置。

3、Scrapy框架抓取图片案例

  1. 案例需求:抓取 360 图片的 beauty 图片并保存到本地 ./image/xxx.jpg

  2. url地址:https://image.so.com/?src=tab_web

  3. 爬取页面posturl地址:https://image.so.com/zjl?sn={}&ch=beauty
    在这里插入图片描述

  4. F12抓包分析:
    在这里插入图片描述
    在这里插入图片描述

  5. 检查网络源代码,获取所需数据的json文件:
    在这里插入图片描述

  6. 创建Scrapy项目:编写items.py文件

    import scrapy
    
    
    class SoItem(scrapy.Item):
        # 图片链接
        image_url = scrapy.Field()
        # 图片标题
        image_title = scrapy.Field()
    
  7. 编写爬虫文件:

    import scrapy
    import json
    from ..items import SoItem
    
    
    class SoSpider(scrapy.Spider):
        name = "so"
        allowed_domains = ["image.so.com"]
        # start_urls = ["http://image.so.com/"]
        url = 'https://image.so.com/zjl?sn={}&ch=beauty'
    
        def start_requests(self):
            """
            生成所有要抓取的url地址,一次性交给调度器入队列
            :return:
            """
            for sn in range(30, 151, 30):
                page_url = self.url.format(sn)
                yield scrapy.Request(url=page_url, callback=self.parse)
    
        def parse(self, response):
            """
            提取图片的链接
            :param response:
            :return:
            """
            html = json.loads(response.text)
            for one_image_list in html["list"]:
                item = SoItem()
                item["image_url"] = one_image_list["qhimg_url"]
                item["image_title"] = one_image_list["title"]
                # 图片链接提取完成后,直接交给管道文件处理即可
                yield item
    
    
  8. 在管道文件中导入导入并继承 scrapy 的 ImagesPipeline 类,重写get_media_requests() 方法 和 file_path() 方法:

    import scrapy
    from scrapy.pipelines.images import ImagesPipeline
    
    
    class SoPipeline(ImagesPipeline):
        # 重写 get_media_requests()方法,将图片的链接交给调度器入队列即可
        def get_media_requests(self, item, info):
            yield scrapy.Request(url=item["image_url"], meta={"title": item['image_title']})
    
        # 重写file_path()方法 处理文件路径及文件名
        def file_path(self, request, response=None, info=None, *, item=None):
            image_title = request.meta['title']
            filename = image_title + '.jpg'  # 拼接图片名称
            return filename
    
    
  9. 在全局配置文件中,通过 IMAGES_STORE =“路径” 指定文件保存的位置

    # 指定图片保存路径
    # 会存放到images下的full文件夹
    IMAGES_STORE = './images/'
    
  10. 创建run.py文件运行爬虫:

    from scrapy import cmdline
    
    cmdline.execute("scrapy crawl so".split())
    
    

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

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

相关文章

领域驱动设计理论实践

战略设计 战略设计是将“混沌”解构成“清晰”的过程,在该过程从开始到结束的历程之中,我们会划分出领域、界定通用语言范围、确定出系统限界上下文以及上下文之间的映射方式。 领域划分 战略设计在领域驱动设计中起着关键作用,因为其决定了…

使用Bazel构建前端Sass

注:本文假设对Bazel有一定的了解。本文基于Bazel 4.2.2 版本 在web前端领域,前端样式,web浏览器只认CSS样式语言。而CSS样式语言又过于低级。于是有人发明了更高级的语言:Sass[1],用于生成CSS代码。 这样的方案&#x…

【C++】队列模拟问题

文章目录队列模拟问题12.7.1 ATM问题12.7.2 队列类12.7.3 Queue类的接口12.7.4 **Queue类的实现**12.7.5 是否需要其他函数?12.7.6 Customer类queue.hqueue.cpp12.7.7 ATM模拟main.cpp队列模拟问题 12.7.1 ATM问题 Heather银行打算在Food Heap超市开设一个自动柜员…

【C++STL精讲】vector的基本使用与常用接口

文章目录💐专栏导读💐文章导读🌷vector是什么?🌷vector的基本使用🌷vector常用函数接口💐专栏导读 🌸作者简介:花想云,在读本科生一枚,致力于 C/C…

HAL库版FreeRTOS(上)

目录 FreeRTOS 简介初识FreeRTOS什么是FreeRTOS?为什么选择FreeRTOS?FreeRTOS 的特点商业许可 磨刀不误砍柴工查找资料FreeRTOS 官方文档Cortex-M 架构资料 FreeRTOS 源码初探FreeRTOS 源码下载FreeRTOS 文件预览 FreeRTOS 移植FreeRTOS 移植移植前准备添加FreeRTO…

浏览器断点调试说明

断点调试 断点调试面板 功能按钮介绍 描述:继续执行脚本 或者叫(逐过程执行) 快捷键 (F8)或者是(Ctrl\) 作用:打断点了的地方(比如有是三个断点地方)就会 第一…

大数据能力提升项目|学生成果展系列之四

导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

13.vue-cli

单页面应用程序:所有的功能只在index.html中完成 vue-cli是vue版的webpack 目录 1 安装vue-cli 2 创建项目 3 使用预设 4 删除预设 5 开启项目 6 项目文件内容 6.1 node_moduls 中是项目依赖的库 6.2 public 6.2.1 favicon.ico 是浏览器页签内部…

尚融宝——整合OpenFeign与Sentinel实现兜底方法——验证手机号码是否注册功能

一、整合过程 在项目添加依赖&#xff1a;添加位置 <!--服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 在需要的服务中添加启动注…

spring中常见的注解

DI(依赖注入中常见的注解) Autowired&#xff1a;按类型自动装配Resource&#xff1a;按名称或类型自动装配&#xff0c;Qualifier&#xff1a;按名称自动装配&#xff0c;Value &#xff1a;注入int、float、String等基本数据类型&#xff0c;只能标注在成员变量、setter方法上…

【Gradle-1】入门Gradle,前置必读

1、为什么要学习Gradle Gradle作为Android开发默认的构建工具&#xff0c;你的每一次编译都会用到它。招聘要求从以前的熟悉加分&#xff0c;到现在的必备技能&#xff0c;可见Gradle的重要性。 做开发这么久了&#xff0c;你是否对Gradle又爱又恨&#xff1f;是否对Gradle的…

第三章(1):自然语言处理概述:应用、历史和未来

第三章&#xff08;1&#xff09;&#xff1a;自然语言处理概述&#xff1a;应用、历史和未来 目录第三章&#xff08;1&#xff09;&#xff1a;自然语言处理概述&#xff1a;应用、历史和未来1. 自然语言处理概述&#xff1a;应用、历史和未来1.1 主要应用1.2 历史1.3 NLP的新…

【科普】PCB为什么常用50Ω阻抗?6大原因

在PCB设计中&#xff0c;阻抗通常是指传输线的特性阻抗&#xff0c;这是电磁波在导线中传输时的特性阻抗&#xff0c;与导线的几何形状、介质材料和导线周围环境等因素有关。 对于一般的高速数字信号传输和RF电路&#xff0c;50Ω是一个常用的阻抗值。 为什么是50Ω&#xff1f…

《程序员面试金典(第6版)》面试题 10.09. 排序矩阵查找(观察法,二分法,分治算法入门题目,C++)

题目描述 给定MN矩阵&#xff0c;每一行、每一列都按升序排列&#xff0c;请编写代码找出某元素。 示例: 现有矩阵 matrix 如下&#xff1a;[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target 5&…

wma格式怎么转换mp3,4种方法超快学

其实我们在任何电子设备上所获取的音频文件都具有自己的格式&#xff0c;每种格式又对应着自己的属性特点。比如wma就是一种音质优于MP3的音频格式&#xff0c;虽然很多小伙伴比较青睐于wma所具有的音质效果&#xff0c;但也不得不去考虑因wma自身兼容性而引起很多播放器不能支…

【高危】Apache Solr 代码执行漏洞(MPS-wic0-9hjb)

漏洞描述 Apache Solr 是一款开源的搜索引擎。 在Apache Solr 受影响版本中&#xff0c;由于Solr默认配置下存在服务端请求伪造漏洞&#xff0c;且SolrResourceLoader中实现了java SPI机制。当Solr以SolrCloud模式启动时&#xff0c;攻击者可以通过构造恶意的solrconfig.xml文…

几个最基本软件的环境变量配置

在Windows中配置环境变量位置&#xff1a; 控制面板->系统和安全->系统。可以点击&#xff1a;“此电脑”->“属性”直接进入。 点击“高级系统设置”->【环境变量】。在这里可以看见用户变量和系统变量&#xff0c;如果你这台机器不是你一个人使用设置为用户变量…

接口文档设计避坑指南

我们做后端开发的,经常需要定义接口文档。 最近在做接口文档评审的时候&#xff0c;发现一个小伙伴定义的出参是个枚举值&#xff0c;但是接口文档没有给出对应具体的枚举值。其实&#xff0c;如何写好接口文档&#xff0c;真的很重要。今天田螺哥&#xff0c;给你带来接口文档…

Vue学习笔记(4. 生命周期)

1. 生命周期写法&#xff08;vue2与vue3比对&#xff09; 创建前&#xff1a;vue3 setup, vue2 beforeCreate //组件创建前执行的函数 创建后&#xff1a;vue3 setup, vue2 created //组件创建后执行的函数 挂载前&#xff1a;vue3 onBeforeMount, vue2 beforeMount //挂…

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization 论文地址&#xff1a;https://arxiv.org/pdf/2303.14189.pdf 概述 本文提出了一种通用的 CNN 和 Transformer 混合的视觉基础模型 移动设备和 ImageNet 数据集上的精度相同的前提下&#xf…