返回顶部
首页 > 资讯 > 后端开发 > Python >使用Scrapy自带的ImagesPip
  • 624
分享到

使用Scrapy自带的ImagesPip

自带ScrapyImagesPip 2023-01-30 22:01:27 624人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)用的。 优势: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 异步下载 ...... 工作流程: 爬取一个

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

优势:

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

工作流程:

  1. 爬取一个Item,将图片的URLs放入image_urls字段
  2. Spider返回的Item,传递到Item Pipeline
  3. Item传递到ImagePipeline,将调用Scrapy 调度器和下载器完成image_urls中的url的调度和下载。
  4. 图片下载成功结束后,图片下载路径、url和校验和等信息会被填充到images字段中。

实现方式:

  1. 自定义pipeline,优势在于可以重写ImagePipeline类中的实现方法,可以根据情况对照片进行分类;
  2. 直接使用ImagePipeline类,简单但不够灵活;所有的图片都是保存在full文件夹下,不能进行分类

实践:爬取Http://699pic.com/image/1/这个网页下的前四个图片集(好进行分类演示)

这里使用方法一进行实现:

步骤一:建立项目爬虫

1.创建工程:scrapy startproject xxx(工程名)

2.创建爬虫:进去到上一步创建的目录下:scrapy genspider xxx(爬虫名)  xxx(域名)

 

步骤二:创建start.py

1  from scrapy import cmdline
2 
3 cmdline.execute("scrapy crawl 699pic(爬虫名)".split(" "))

 

步骤三:设置settings

1.关闭机器人协议,改成False

2.设置headers

3.打开ITEM_PIPELINES

 

将项目自动生成的pipelines注释掉,黄色部分是下面步骤中自己写的pipeline,这里先不写。

 

步骤四:item

1 class Img699PicItem(scrapy.Item):
2     # 分类的标题
3     cateGory=scrapy.Field()
4     # 存放图片地址
5     image_urls=scrapy.Field()
6     # 下载成功后返回有关images的一些相关信息
7     images=scrapy.Field()

 

步骤五:写spider

import scrapy
from ..items import Img699PicItem
import requests
from lxml import etree


class A699picSpider(scrapy.Spider):
    name = '699pic'
    allowed_domains = ['699pic.com']
    start_urls = ['http://699pic.com/image/1/']
    headers={
        'User-Agent':'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
    }



    def parse(self, response):
        divs=response.xpath("//div[@class='special-list clearfix']/div")[0:4]
        for div in divs:
            category=div.xpath("./a[@class='special-list-title']//text()").get().strip()
            url=div.xpath("./a[@class='special-list-title']/@href").get().strip()
            image_urls=self.parse_url(url)
            item=Img699PicItem(category=category,image_urls=image_urls)
            yield item

    def parse_url(self,url):
        response=requests.get(url=url,headers=self.headers)
        htmlElement=etree.HTML(response.text)
        image_urls=htmlElement.xpath("//div[@class='imgshow clearfix']//div[@class='list']/a/img/@src")
        return image_urls

 

步骤六:pipelines

import os
from scrapy.pipelines.images import ImagesPipeline
from . import settings


class Img699PicPipeline(object):
    def process_item(self, item, spider):
        return item


class Images699Pipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        # 这个方法是在发送下载请求之前调用的,其实这个方法本身就是去发送下载请求的
        request_objs=super(Images699Pipeline, self).get_media_requests(item,info)
        for request_obj in request_objs:
            request_obj.item=item
        return request_objs

    def file_path(self, request, response=None, info=None):
        # 这个方法是在图片将要被存储的时候调用,来获取这个图片存储的路径
        path=super(Images699Pipeline, self).file_path(request,response,info)
        category=request.item.get('category')
        image_store=settings.IMAGES_STORE
        category_path=os.path.join(image_store,category)
        if not os.path.exists(category_path):
            os.makedirs(category_path)
        image_name=path.replace("full/","")
        image_path=os.path.join(category_path,image_name)
        return image_path

步骤七:返回到settings中

1.将黄色部分填上

2.存放图片的总路径

IMAGES_STORE=os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')

 

最终结果:

 

--结束END--

本文标题: 使用Scrapy自带的ImagesPip

本文链接: https://lsjlt.com/news/179328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Scrapy自带的ImagesPip
    ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)用的。 优势: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 异步下载 ...... 工作流程: 爬取一个...
    99+
    2023-01-30
    自带 Scrapy ImagesPip
  • 怎么正确使用Scrapy自带的FilesPipeline
    这篇文章主要讲解了“怎么正确使用Scrapy自带的FilesPipeline”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么正确使用Scrapy自带的Fi...
    99+
    2024-04-02
  • scrapy的简单使用
    使用之前的创建虚拟环境方法(pipenv) 创建虚拟环境并进入虚拟环境 mkdir douban cd douban pipenv install pipenv shell 再安装我们的scrapy pipenv install s...
    99+
    2023-01-30
    简单 scrapy
  • python中Scrapy shell的使用
    前言: 我们想要在爬虫中使用xpath、beautifulsoup、正则表达式,css选择器等来提取想要的数据,但是因为scrapy是一个比较重的框架,每次运行都要等到一段时间,因此...
    99+
    2024-04-02
  • scrapy框架ItemPipeline的使用
    目录Item Pipeline简介功能:一、一个自己的Pipeline类二、启用一个Item Pipeline组件将item写入JSON文件将item写入MongoDBItem Pi...
    99+
    2024-04-02
  • java自带排序使用
    基本类型排序: int a[]={1,2,5,3,6,4}; Arrays.sort(a);//对a升序排序 Arrays.sort(a,0,6);//对a从下标0,到下标5排序 ...
    99+
    2024-04-02
  • 使用scrapy爬取suning
    # -*- coding: utf-8 -*- import scrapy from copy import deepcopy class SuSpider(scrapy.Spider): name = 'su' ...
    99+
    2023-01-31
    scrapy suning
  • 如何使用scrapy-splash
    这篇文章主要介绍了如何使用scrapy-splash,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!1.scrapy_splash是scrapy的一个组件scrapy_splash加载js数据基于Spla...
    99+
    2023-06-06
  • 使用mysql自带工具的方法
    下文给大家带来关于使用mysql自带工具的方法,感兴趣的话就一起来看看这篇文章吧,相信看完使用mysql自带工具的方法对大家多少有点帮助吧。1)mysql命令:mysql命令事是使用最多的命令工具了,为用户...
    99+
    2024-04-02
  • Android中如何使用自带的TextToSpeech
    要在Android中使用自带的TextToSpeech功能,您可以按照以下步骤进行操作:1. 在您的Android项目中的`Andr...
    99+
    2023-08-23
    Android
  • MacOs使用IDEA自带的maven教程
    IDEA已经自带了maven,不需要再额外去安装 下面是配置maven的步骤 1.找到自带maven的地址 通过idea查看maven得知maven安装的位置为/Applications/IntelliJ\ IDEA.app/Content...
    99+
    2023-12-23
    macos intellij-idea maven
  • 如何使用python自带IDLE
    下面从 python自带的IDLE,python的命令行,Windows命令行,三个方面介绍 如何使用python 一、 python自带的IDLE和shell 1. 在开始菜单打开python的shell   2. python 的 ...
    99+
    2023-01-31
    自带 如何使用 python
  • Python爬虫框架-scrapy的使用
    Scrapy Scrapy是纯python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,并且包含了...
    99+
    2022-06-02
    Python爬虫框架scrapy使用 Python scrapy使用
  • selenium在scrapy中的使用代码
    在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。但是通过观...
    99+
    2024-04-02
  • Scrapy的中间件如何使用
    这篇文章主要讲解了“Scrapy的中间件如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scrapy的中间件如何使用”吧!Scrapy 结构概述:一、下载器中间件(Downloader...
    99+
    2023-07-02
  • Scrapy使用案例分析
    这篇“Scrapy使用案例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Scrapy使用案例分析”文章吧。scrapy是...
    99+
    2023-06-28
  • python Scrapy shell怎么使用
    本文小编为大家详细介绍“python Scrapy shell怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python Scrapy shell怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • 怎么使用Linux自带的gssftp服务
    这篇文章给大家分享的是有关怎么使用Linux自带的gssftp服务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。RedHat和CentOS都自带了一个gssftp服务,使用方式如下:[root@linux&nbs...
    99+
    2023-06-16
  • java自带的sort方法如何使用
    Java自带的sort方法可以用于对数组或列表进行排序。具体使用方法如下:1. 对数组排序:- 使用Arrays类的静态方法sort...
    99+
    2023-10-12
    java
  • win10自带vm虚拟机怎么使用win10自带vm虚拟机使用方法
    win10系统自带虚拟机功能,客户可以在虚拟机中运行程序,从而避免安全风险的顾虑。那样win10自带vm虚拟机怎么使用呢?你必须先组装一些vm虚拟机需要的资料,操作步骤为:打开设定控制面板,先后打开运用和功能、程序流程和功能,挑选开启或关掉...
    99+
    2023-07-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作