Scrapy框架内置管道之图片视频和文件(一篇文章齐全)

1、Scrapy框架初识(点击前往查阅)

2、Scrapy框架持久化存储(点击前往查阅)

3、Scrapy框架内置管道

4、Scrapy框架中间件(点击前往查阅)

Scrapy 是一个开源的、基于Python的爬虫框架,它提供了强大而灵活的工具,用于快速、高效地提取信息。Scrapy包含了自动处理请求、处理Cookies、自动跟踪链接、下载中间件等功能

Scrapy框架的架构图(先学会再来看,就能看懂了!) 

 一、内置管道(图片视频)

1:sttings设置

# 用于在指定目录下创建一个保存图片的文件夹。
IMAGES_STORE = "./imgs"

其他的设置不理解的可以参考: Scrapy框架初识

2:数据分析

详细见图片中注视哦~

代码:

import scrapy
from ..items import CsdnItemclass ImgSpider(scrapy.Spider):# 爬虫文件唯一标识name = "img"# allowed_domains = ["www.xxx.com"]# 发起请求的url列表start_urls = ["https://image.so.com/zjl?sn=0&ch=wallpaper"]def parse(self, response):# 获取返回数据:根据分析得到数据是json格式的img_data = response.json()# 根据数据分析,我们需要数据在list中for url in img_data["list"]:# 循环获取到图片的标题和urlimg_title = url["title"]img_url = url["imgurl"]# 实例化item对象item = CsdnItem()# 往item中封装数据item["img_title"] = img_titleitem["img_url"] = img_url# 将item提交给管道yield item

3:创建item对象

 详细见图片中注视哦~

代码:

import scrapyclass CsdnItem(scrapy.Item):# define the fields for your item here like:# 变量随便命名,scrapy.Field() 是固定写法img_title = scrapy.Field()img_url = scrapy.Field()

4:提交管道,持久化存储

4.1:模块安装 

pip install pillow

4.2:代码分析

配合下方图片:

  • 1、首先导入 ImagesPipeline 模块,然后class类继承。
  • 2、重新构建三个固定函数用于图片的批量下载和保存的操作。
    • get_media_requests函数:负责对图片进行请求发送获取图片二进制的数据。
      • itme获取爬虫数据传过来的数据这个,不懂理解看这个:item相关知识
      • yield发起请求这个是固定写法,参数意思可以看图中注释。
    • file_path函数:负责指定保存图片的名字。
      • 利用requests来获取上面传过来的数据。
      • return返回的值就是图片的名字和后缀
    • item_completed函数:用于将item对象传递给下一个管道。

代码:

import scrapy
from scrapy.pipelines.images import ImagesPipeline  # 导入模块class CsdnPipeline(ImagesPipeline):  # (ImagesPipeline)括号内加入这个 是面向对象继承,属于面向对象知识。# 重新构建三个固定函数用于图片的批量下载和保存的操作。def get_media_requests(self, item, info):  # 该函数是负责对图片进行请求发送获取图片二进制的数据# 可以通过item参数接收爬虫文件提交过来的item对象img_title = item["img_title"]img_url = item["img_url"]# 对图片地址发起请求,(参数1,参数2) 参数1:url  参数2:请求传参,可以将数据传给 file_path 下面这个函数yield scrapy.Request(img_url, meta={"img_title": img_title})def file_path(self, request, response=None, info=None, *, item=None):  # 负责指定保存图片的名字# 接收 get_media_requests 函数中通过meta发送过来的数据。img_title = request.meta["img_title"]# 给图片名字带上后缀img_title = img_title + ".jpg"# 然后返回图片名字return img_titledef item_completed(self, results, item, info):  # 用于将item对象传递给下一个管道return item

5:结果展示与总结

为什么会在这个文件夹中呢?因为刚开始的 settings 中,我们创建并指定了这个文件夹!!!

 补充:在设置 settings 中,还可以设置图片的缩略图尺寸。

 

代码流程:

  • 1.在爬虫文件中进行图片/视频的链接提取

  • 2.将提取到的链接封装到items对象中,提交给管道

  • 3.在管道文件中自定义一个父类为ImagesPipeline的管道类,且重写三个方法即可:

    • def get_media_requests(self, item, info):接收爬虫文件提交过来的item对象,然后对图片地址发起网路请求,返回图片的二进制数据def file_path(self, request, response=None, info=None, *, item=None):指定保存图片的名称
      def item_completed(self, results, item, info):返回item对象给下一个管道类

 二、内置管道(文件)

1:sttings设置

# 用于在指定目录下创建一个保存文件的文件夹。
FILES_STORE = "./file"

其他的设置不理解的可以参考: Scrapy框架初识

2:数据分析

详细见图片中注视哦,比较简单,不做过多分析了~

代码:

import scrapy
from ..items import CsdnItem  # 将item模块导入class FileSpider(scrapy.Spider):# 爬虫文件唯一标识name = "file"# allowed_domains = ["www.xxx.com"]# 发起请求的url列表start_urls = ["https://docs.twisted.org/en/stable/core/examples/"]def parse(self, response):# 解析到url列表url_list = response.xpath('//section[@id="examples"]/section[1]//ul//a/@href').extract()for url in url_list:  # 分析得到URL不全。# 利用字符串分割拼接成一个完整的。url = url.split('../../')[-1]download_url = "https://docs.twisted.org/en/stable/" + url# 文件名称,就取链接的最后的title = url.split('/')[-1]# 创建item对象item = CsdnItem()# 封装值item['file_urls'] = download_urlitem['file_title'] = title# 将item提交给管道yield item

 

3:创建item对象

详细见图片中注视哦,与前面不同的是有2个字段是必须存在的。

 

4:提交管道,持久化存储

4.1:模块安装 

pip install pillow

4.2:代码分析

配合下方图片:

  • 1、首先导入FilesPipeline 模块,然后class类继承。
  • 2、重新构建三个固定函数用于文件的批量下载和保存的操作。
    • get_media_requests函数:负责对文件进行请求,获取图片二进制的数据。
      • itme获取爬虫数据传过来的数据这个,不懂理解看这个:item相关知识
      • yield发起请求这个是固定写法,参数意思可以看图中注释。
    • file_path函数:负责指定保存文件的名字。
      • 利用requests来获取上面传过来的数据。
      • return返回的值就是文件的名字
    • item_completed函数:用于将item对象传递给下一个管道。

代码: 

import scrapy
from scrapy.pipelines.files import FilesPipeline  # 导入模块class CsdnPipeline(FilesPipeline):  # (ImagesPipeline)括号内加入这个 是面向对象继承,属于面向对象知识。# 重新构建三个固定函数用于文件的批量下载和保存的操作。def get_media_requests(self, item, info):  # 该函数是负责对文件url进行请求获取文件二进制的数据# 可以通过item参数接收爬虫文件提交过来的item对象file_title = item["file_title"]file_urls = item["file_urls"]# 对文件地址发起请求,(参数1,参数2) 参数1:url  参数2:请求传参,可以将数据传给 file_path 下面这个函数yield scrapy.Request(file_urls, meta={"file_title": file_title})def file_path(self, request, response=None, info=None, *, item=None):  # 负责指定保存文件的名字# 接收 get_media_requests 函数中通过meta发送过来的数据。file_title = request.meta["file_title"]# 然后返回文件名字return file_titledef item_completed(self, results, item, info):  # 用于将item对象传递给下一个管道return item

5:结果展示与总结

 

  • 代码流程:

    • spider中爬取要下载的文件链接,将其放置于item中的file_urls字段中存储

    • spider提交item给FilesPipeline管道

    • FilesPipeline处理时,它会检测是否有file_urls字段,如果有的话,则会对其进行文件下载

    • 下载完成之后,会将结果写入item的另一字段files

Item要包含file_urlsfiles两个字段

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重磅】:Spring Initializer 已经不支持Java8,也就是SpringBoot2.x项目初始化

Spring Initializer 已经不支持Java8 问题描述解决方案升级java版本更换IDEA内置的Spring Initializer中 Server URL的镜像地址 问题描述 我们可以看到在IDEA内置的Spring Initializer中 Java版本选择模块已经不支持1.8了,同样的,官网也不再支持了 解决…

RK3568 android11 实现GT9xx双路I2C触摸

一,GT911 触摸屏简介 它的接口类型为 I2C ,供电电压和通讯电压均为 3.3V 。这款电容触摸屏内置了上拉电阻,这意味着我们的开发板上与该触摸屏的接口处不需要设置上拉电阻。关于线序,同样是 GT911 ,不同批次的器件都有…

ad5676驱动详解及代码

AD5676为单片8通道DAC,一下驱动代码是用的模拟SPI去写的,芯片型号STM32F103C8xx,亲测是可以用的,输出比较稳定,废话不多说,直接上代码: 首先头文件: #define GPIO_PORT_SPI1_SCK G…

浅谈基于EIoT能源物联网的工厂智能照明系统应用改造

【摘要】:随着物联网技术的发展,许多场所针对照明合理应用物联网照明系统,照明作为工厂的重要能耗之一,工厂的照明智能化控制,如何优化控制、提高能源的利用率,达到节约能源的目的。将互联网的技术应用到工…

学习Opencv(蝴蝶书/C++)相关——3. OpenCV的数据类型

文章目录 1. 堆栈和动态分配内存2. 模版类语法2.1 OpenCV中的模板结构2.2 C++ template基本语法3. 优化3.1 OpenCV的cv::Mat类计算优化3.1.1 cv::Mat VS numpy array3.1.2 结论3.2 Eigen库3.2.1 简介3.2.2 Eigen vs OpenCV::mat vs GLM3.3 关于优化4. STL,Boost和std4.1 名词解…

基于单片机设计的超声波测距仪(采用HC-SR04模块)

一、前言 本项目是基于单片机设计的超声波测距仪,主要采用了STC89C52单片机和HC-SR04超声波测距模块。通过LCD1602液晶显示屏来展示测量的距离信息。 超声波测距技术是一种常见的非接触式测距方法,利用超声波的传播速度测量物体与测距器之间的距离。它…

npm-工具包

npm-工具包 npm 介绍 npm&#xff08;Node Package Manager&#xff09;是用于管理和共享Node.js包&#xff08;包括代码、工具和资源&#xff09;的包管理工具 常用命令 局部安装包 npm install <package-name>: 安装指定的包 npm install <package-name> --save…

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合

产品&#xff1a;4块55寸OLED透明拼接屏 项目地点&#xff1a;南宁 项目时间&#xff1a;2023年11月 应用场景&#xff1a;吉利展厅 在2023年11月的南宁&#xff0c;吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…

4.Spring源码解析-loadBeanDefinitions(XmlBeanDefinitionReader)

第一个点进去 发现是空 肯定走的第二个逻辑了 这里在这里已经给属性设置了值&#xff0c;所以肯定不是空能拿到。 1.ClassPathXmlApplicationContext 总结&#xff1a;该loadBeanDefinitions是XmlBeanDefinitionReader设置xml文件在哪。

win11系列:避坑宝典|win11升级最新预览体验版bug梳理

win11系列&#xff1a;避坑宝典|win11升级最新预览体验版bug梳理 一、亲测win11升级的前世今生。&#xff08;一&#xff09;问题描述梳理。&#xff08;二&#xff09;故障原因分析。&#xff08;三&#xff09;具体解决方案。2.【已解决】①尝试关Hyper-v重启&#xff1b;②从…

数据库基础入门 — 关联查询

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

【刷题笔记】匹配字符串||KMP||动图解析||符合思维方式

找出字符串中第一个匹配项的下标 1 题目描述 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/ 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开…