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

基于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.mfbz.cn/a/12893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速部署个人-ChatGPT Next Web

前提:要有梯子、谷歌账号。 目录 一、源码地址: 二、演示地址: 三、获取API密钥 四、 部署 五、重新部署 一、源码地址: GitHub - Yidadaa/ChatGPT-Next-Web: One-Click to deploy well-designed ChatGPT web UI on Verc…

批量给TXT文档插入带标题合成图片-Chatgpt生成TXT文档配图神器

1、我们用《Chatgpt 3.5-turbo软件》批量生成txt文档,但是这样txt文档里不带图片,直接发布到网站上,光有文字没有图片,效果也不是很理想,就需要一款配图软件。 2、提高文章的可读性和吸引力:插入图片可以丰…

JavaSE学习进阶day06_04 集合的嵌套和不可变集合

接昨天讲的内容,今天还要继续学习集合。学完今天的内容,集合就告于段落了,坚持! 集合的嵌套(掌握!): 什么是集合的嵌套?为什么要集合的嵌套?为了搞清楚这个…

免费英文在线翻译-英文自动翻译

免费的自动翻译器 作为一款免费的自动翻译器,我们的产品可以为全球用户提供高质量、高效率的翻译服务,帮助他们更好地沟通和交流。 现在,随着数字化的进一步发展,人们之间的跨文化交流越来越频繁。然而,语言偏差和文…

学习小程序基础内容之逻辑交互

我们先来看一下实现的效果。 然后再来分享结构。 结构分为左右3:7 分配, 左侧是类别,右侧是该类别对应的品牌。 后台会在onload的请求把左侧的类别返回来,然后我们通过循环把数据展示出来。然后通过点击事件,把对应的品牌请求回来…

CentOS 8自动化安装MongoDB并安装和实验master-slave集群、副本集群(Replica Set)、分片集群(Sharding)

文章目录 CentOS 8自动化安装MongoDB安装Master-Slave集群安装并测试副本集(Replica Set)集群安装副本集(Replica Set)集群实验测试 安装并测试分片集群(Sharding) 注意实验使用的是ARM架构的CentOS 8 虚拟机 CentOS 8自动化安装MongoDB 首先&#xff0…

【单片机】基于Arduino cli和VS Code配置开发环境,彻底抛弃Arduino IDE

文章目录 0 前言1 VS Code的优势和Arduino IDE的劣势2 前期准备3 Arduino cli3.1 Arduino cli是什么3.2 下载与安装3.3 基本使用3.4 开发环境配置 4 VS Code配置5 参考链接 0 前言 之前有在电脑上基于VS Code配置Arduino环境,大致方法就是在安装Arduino IDE的前提下…

linux网络

查看网络接口信息 ifconfig mtu 最大传输单元 mtu和mss区别 hostname命令 永久修改 hostnamectl set-hostname 切换shell环境生效 或者vi hostname 编辑完重启生效 查看路由表条目route route查看或设置主机中路由表信息 route -n将路由记录中的地址信息显示为数字形式 …

Linux查看串行端口

查看串口驱动 cat /proc/tty/driver/serial查看串口设备 dmesg | grep ttyS*[rootlocalhost driver]# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD 2:…

Hadoop之HBase

文章目录 一、HBase简介二、HBase结构1.1HBase逻辑结构1.2HBase物理结构1.3HBase基础架构 三、HBase安装配置3.1单机模式3.2集群搭建 四、HBase JAVA API 一、HBase简介 《HBase官方文档》的原文地址是:http://hbase.apache.org/book.html W3Cschool.cn进行整理翻译…

上位机:创建WPF应用并使用控件完成控件交互

创建WPF应用并使用控件完成控件交互 1.XAML是WPF技术中专门用于设计UI的语言。 2.优点,XAML是一种声明型语言,只能用来声明一些UI元素、绘制UI和动画,不能在其中加入程序逻辑。实现UI与逻辑的剥离。 下面使用visual studio2019建立一个WPF项目: 进入项目,点击运行,然后…

今天面了个字节跳动拿35K出来的,真是砂纸擦屁股,给我露了一手啊

今年的金三银四已经快要结束了,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好&#xff0c…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析,感觉思路很有意思,感兴趣的xdm可以到大佬视频下提供的链接进行测试(传送门)这类社交平台的XSS漏洞利用起来其实危害是特别大的,利用XSS能在社交平台上呈现蠕虫式的扩散,大部分…

电脑C盘被格式化 如何快速将被删的数据文件恢复找回?

如今的互联网时代,不管是办公还是休闲,一般都喜欢在电脑上进行操作,尤其是办公,感觉有了电脑能轻松不少,可以将一些工作中的重要数据保存在电脑里面,那么电脑里面的数据真就很安全了吗?这个就让…

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

c/c:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&#x…

Verilog | 二进制与格雷码

一、格雷码简介 格雷码是一个叫弗兰克格雷的人在 1953 年发明的,最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进…

HttpServletRespon

1、HttpServletRespon对象 在Servlet API中,定义了一个HttpResponse接口,它继承于ServletResponse接口,专门用于封装HTTP响应消息 HTTP响应消息分为响应状态行、响应消息头、响应消息体三部分,所以HttpResponse接口中定义了向客…

Qt模型视图结构

一.模型视图介绍 1.Model/View(模型/视图结构) 视图(View)是显示和编辑数据的界面组件, 模型(Model)是视图和原始数据之间的接口 2.视图组件有:QListView QTreeView QTableView,QColumnView,QHeaderView 模型组件有:QStringListM…

设计模式-原型模式

原型模式 文章目录 原型模式什么是原型模式为什么要用原型模式原型模式的实现方式浅拷贝深拷贝 如何实现深拷贝递归拷贝对象序列化与反序列化优化浅拷贝与深拷贝 总结 什么是原型模式 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有: (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…
最新文章