python爬虫之Scrapy框架--保存图片(详解)

这篇具有很好参考价值的文章主要介绍了python爬虫之Scrapy框架--保存图片(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Scrapy 使用ImagePipeline 保存图片

使用图片管道 

具体步骤

安装相关的依赖库

创建Scrapy项目

配置settings.py 

 定义Item

 编写Spider

运行Spider

Scrapy 自定义ImagePipeline

自定义图片管道


Scrapy 使用ImagePipeline 保存图片

python爬虫之Scrapy框架--保存图片(详解)

Scrapy提供了一个 ImagePipeline,用来下载图片这条管道,图片管道ImagesPipeline 提供了方便并具有额外特性的功能,比如:

  • 将所有下载的图片转换成通用的格式(JPG)和模式(RGB)
  • 避免重新下载最近已经下载过的图片
  • 缩略图生成
  • 检测图像的宽/高,确保它们满足最小限制

使用图片管道 

scrapy.pipelines.images.ImagesPipeline

使用 ImagesPipeline ,典型的工作流程如下所示:

  1. 在一个爬虫中,把图片的URL放入 image_urls 组内(image_urls是个列表)
  2. URL从爬虫内返回,进入图片管道
  3. 当图片对象进入 ImagesPipeline,image_urls 组内的URLs将被Scrapy的调度器和下载器安排下载
  4. settings.py文件中配置保存图片路径参数IMAGES_STORE
  5. 开启管道

需要安装pillow4.0.0以上版本

pip install pillow==9.2.0

问题

报错:twisted.python.failure.Failure OpenSSL.SSL.Error

解决方案

pip uninstall cryptography pip install cryptography==36.0.2


具体步骤

安装相关的依赖库

Pillow 

pip install scrapy Pillow
创建Scrapy项目

首先,创建一个Scrapy项目,可以使用以下命令在命令行中创建一个新项目:

scrapy startproject myproject
配置settings.py 

打开生成的Scrapy项目文件夹,找到其中的settings.py文件,编辑该文件,以配置ImagePipeline。

将以下代码添加到settings.py文件中:

ITEM_PIPELINES定义项目中使用的管道,其中scrapy.pipelines.images.ImagesPipeline是用于处理图片的管道。1是优先级,数字越小优先级越高。

IMAGES_STORE是指定要保存图片的目录路径。将"path/to/save/images"替换为实际的目录路径,以便保存图片。

ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1
}

IMAGES_STORE = 'path/to/save/images'
 定义Item

 在Scrapy项目中,使用Item来定义要提取的数据。在项目的目录下找到items.py文件,编辑该文件,以定义一个Item用于保存图片链接。

定义一个名为MyItem的Item,它包含两个字段:image_urlsimagesimage_urls字段用于存储图片的URL,images字段用于存储已下载的图片的信息。

import scrapy

class MyItem(scrapy.Item):
    image_urls = scrapy.Field()
    images = scrapy.Field()
 编写Spider

在Scrapy项目中,Spider用于定义如何爬取和提取数据。在项目的目录下找到spiders文件夹,并在该文件夹中创建一个Python文件,命名为myspider.py可以根据实际需求命名)。

myspider.py文件中,编写Spider代码以提取图片链接并将其保存到MyItem中。

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        item = MyItem()
        item['image_urls'] = response.css('img::attr(src)').getall()
        yield item

定义了一个名为MySpider的Spider,设置了起始URL为​​​​​​“http://example.com”。在`parse`方法中,我们创建了一个`MyItem`对象,使用CSS选择器提取页面中的所有图片链接,并将其赋值给`item['image_urls']`字段。最后,使用`yield`语句将`item`返回。 

运行Spider

在命令行中,切换到项目根目录,并执行以下命令运行Spider:

scrapy crawl myspider

这将启动Scrapy并开始爬取数据。当爬取完成时,图片将自动下载并保存到指定的目录中。

Scrapy 自定义ImagePipeline

问题

使用官方默认图片管道,有如下几个问题:

  • 文件名不友好
  • 存储图片URL的参数名称与类型太固定

解决方案

自定义ImagePipeline,扩展

自定义图片管道

  • 继承scrapy.pipelines.images import ImagesPipeline

  • 实现get_media_requests(self, item, info)方法

    • 发送请求,下载图片
    • 转发文件名
  • 实现file_path(self,request,response=None,info=None,*,item=None)文章来源地址https://www.toymoban.com/news/detail-506759.html

    • 修改文件名与保存路径
import re


class Scrapy05Pipeline:
  def process_item(self, item, spider):
    return item


from scrapy.pipelines.images import ImagesPipeline
from scrapy.http.request import Request


class MyImagePipeline(ImagesPipeline):
  def get_media_requests(self, item, info):
    return Request(item['image_url'])
  
  def file_path(self, request, response=None, info=None, *, item=None):
    # 处理文件名中的特殊字符
    # name = item.get('name').strip().replace('\r\n\t\t','').replace('(','').replace(')','').replace('/','_')
    name = re.sub('/','_',re.sub('[\s()]','',item.get('name')))
    return f'{name}.jpg'

到了这里,关于python爬虫之Scrapy框架--保存图片(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Scrapy:Python中强大的网络爬虫框架

    在当今信息爆炸的时代,从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架,它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrapy的主要特性和优势,以及如何使用它来构建强大的网络爬虫。

    2024年02月19日
    浏览(65)
  • Python爬虫开发:Scrapy框架与Requests库

    Python爬虫开发中有两个非常流行的工具:Scrapy框架和Requests库。它们各自有自己的优点和适用场景。 Scrapy Scrapy是一个为了爬取网站并提取结构化数据而编写的应用框架,可以非常方便地实现网页信息的抓取。Scrapy提供了多种可配置、可重用的组件,如调度器、下载器、爬虫和

    2024年02月19日
    浏览(56)
  • 【100天精通python】Day45:python网络爬虫开发_ Scrapy 爬虫框架

    目录 1 Scrapy 的简介 2 Scrapy选择器 3 快速创建Scrapy 爬虫 4 下载器与爬虫中间件

    2024年02月11日
    浏览(57)
  • Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】

    先用单独一个项目来使用scrapy_redis,讲解一些重要点!

    2024年02月16日
    浏览(55)
  • 07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

    一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一

    2024年02月09日
    浏览(42)
  • 《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径

    上一节课我们好不容易装好了 Scrapy,今天我们就来学习如何用好它,有些同学可能会有些疑惑,既然我们懂得了Python编写爬虫的技巧,那要这个所谓的爬虫框架又有什么用呢?其实啊,你懂得Python写爬虫的代码,好比你懂武功,会打架,但行军打仗你不行,毕竟敌人是千军

    2024年02月16日
    浏览(46)
  • 爬虫:Scrapy热门爬虫框架介绍

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(43)
  • 爬虫---scrapy爬虫框架(详细+实战)

    ​ 活动地址:CSDN21天学习挑战赛 1、基本功能 Scrapy 是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指

    2023年04月22日
    浏览(49)
  • 爬虫(四):Scrapy热门爬虫框架介绍

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月11日
    浏览(46)
  • 爬虫框架scrapy基本原理

    scrapy是python的爬虫框架,类似于django(python的web框架)。 安装: Mac、Linux 执行 pip3 install scrapy ,不存在任何问题 Windows 执行 pip3 install scrapy ,如果安装失败,执行下面步骤: (1)安装wheel(为支持通过文件安装软件): pip3 install wheel (wheel官网) (2)安装lxml: pip3 insta

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包