我们基于scrapy获取来自pic.xxx.com的图像,首先新建一个scrapy项目:

(env) ....\TempStack>scrapy startproject netbian

对于图像,Scrapy用ImagesPipeline类提供一种方便的方式来下载和存储图片,需要PIL库支持。

爬取图像的工作流程如下:

  • 爬取一个Item,将图片的URL放入 image_urls 字段;
  • 从 Spider 返回的Item,传递到 ItemPipeline
  • 当Item传递到ImagePipeline,将调用Scrapy 调度器和下载器完成 image_urls 中的url的调度和下载。

首先,我们定义items:

import scrapyclass NetbianItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()imgurl = scrapy.Field() # 图片urlimgname = scrapy.Field() # 图片名称dirname = scrapy.Field() # 网页中图片分类的目录, 比如4k风景, 4k游戏等

实现spider,即文件spiders/imgs4k.py,spider仅收集所有图像的URL:

import scrapy
from netbian.items import NetbianItemclass Imgs4kSpider(scrapy.Spider):name = 'imgs4k'allowed_domains = ['pic.projectname_or_xxx.com']start_urls = ['http://pic.xxx.com/4kfengjing','http://pic.xxx.com/4kmeinv','http://pic.xxx.com/4kyouxi','http://pic.xxx.com/4kdongman','http://pic.xxx.com/4kyingshi','http://pic.xxx.com/4kmingxing','http://pic.xxx.com/4kqiche','http://pic.xxx.com/4kdongwu','http://pic.xxx.com/4krenwu','http://pic.xxx.com/4kmeishi','http://pic.xxx.com/4kzongjiao','http://pic.xxx.com/4kbeijing',]def parse(self, response):item = NetbianItem()item['imgurl'] = response.xpath("//ul[@class='clearfix']/li/a/img/@src").getall()item['imgname'] = response.xpath("//ul[@class='clearfix']/li/a/img/@alt").getall()item['dirname'] = response.xpath("//div[@class='classify clearfix']/a[@class='curr']/text()").get()yield itemnext_page = response.xpath("//div[@class='page']/a[last()-1]/@href").get()if next_page:yield response.follow(next_page,callback=self.parse)

面对Item收集到的URL,我们需要使用ImagePipeline去做下一步处理,需要在自定义的ImagePipeline类中重载的方法有: get_media_requests(item,info)

正如工作流程所示,Pipeline将从item中获取图片的URLs并下载它们,所以必须重载get_media_requests。因此,我们实现pipelines.py:

import scrapy
# 导入图片管道
from scrapy.pipelines.images import ImagesPipelineclass NetbianPipeline(ImagesPipeline):# 重写两个方法# 爬取图片def get_media_requests(self, item, info):for i in range(len(item['imgurl'])):# 爬取的图片地址并不是完整的,需要加上协议和域名imgurl = "http://pic.xxx.com" + item['imgurl'][i]# meta 传参给self.file_path()yield scrapy.Request(imgurl, meta={'imgname': item['imgname'][i], 'dirname': item['dirname']})# 给图片定义存放位置和图片名def file_path(self, request, response=None, info=None):imgname = request.meta['imgname'].strip() + '.jpg'dirname = request.meta['dirname']filename = u"{}/{}".format(dirname, imgname)return filename

在settings.py中进行设置:

BOT_NAME = 'netbian'SPIDER_MODULES = ['netbian.spiders']
NEWSPIDER_MODULE = 'netbian.spiders'# Obey robots.txt rules
ROBOTSTXT_OBEY = False  # 关闭禁止爬取协议# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 1  # 延迟# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
}# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
IMAGES_STORE = "IMAGES"
ITEM_PIPELINES = {'netbian.pipelines.NetbianPipeline': 300,
}
MEDIA_ALLOW_REDIRECTS =True

我们在TempStack/netbian下新增目录IMAGES作为存放图像的主目录。

执行scrapy项目:

(env) ...\TempStack\netbian>scrapy crawl imgs4k

爬虫运行结束后,我们可以得到结果:

上述系统帮助我们实现了一种自动化的图像分类数据集的收集。是一个实用的实例项目。

6.2.Scrapy获取图像相关推荐

  1. Python 爬虫框架Scrapy安装汇总

    传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...

  2. Python:爬虫框架Scrapy的安装与基本使用

    一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...

  3. Python:Scrapy实战项目手机App抓包爬虫

    1. items.py class DouyuspiderItem(scrapy.Item):name = scrapy.Field()# 存储照片的名字imagesUrls = scrapy.Fie ...

  4. Python:Scrapy的settings

    Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...

  5. Python:Scrapy Shell

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  6. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  7. Python:Scrapy 框架简单介绍

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

  8. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  9. 『Scrapy』爬虫框架入门

    框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...

最新文章

  1. SparkSQL读取文件时,数据字段类型调整
  2. springboot+sockjs进行消息推送(群发)
  3. 1800万元砸向子公司 点击网络巩固SaaS业务
  4. Matlab中错误使用mex
  5. postsql时间计算
  6. 关于亿图图示缩放锁定1%的问题
  7. VB.NET中Socket编程
  8. 一群人在网上直播自己怎么写代码,而且还有人爱看
  9. 无人机协同搜索matlab,一种多无人机协同目标搜索方法与流程
  10. java获取上个月15号_java获取当前上一周、上一月、上一年的时间
  11. Word模板导出更新目录
  12. 高通推出通过以太网供电的小型蜂窝芯片
  13. 戴尔要求DEC雇员扔掉Mac
  14. 案例解读 | 重视管理会计,让永辉超市从生鲜市场破局
  15. 焊接过程中数据采集管理软件设计与应用综述
  16. Uboot中的MIPI DSI clk分析
  17. Python 生成图片验证码(详解)
  18. AT1983 [AGC001E] BBQ Hard
  19. Google Earth Engine python ——从谷歌地球引擎(GEE)上的点提取栅格值的实现
  20. 织梦cms模板-织梦自适应模板-织梦模板

热门文章

  1. 外包三年,我废了..…
  2. 阿里,腾讯,拼多多面试必挂:面对千万级、亿级流量怎么处理?
  3. 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR超详细解析
  4. 卧槽,又一个Java面试神器!!!
  5. MapReduce设计模式
  6. 如何确定敏捷是否适合你的团队?
  7. Scrum敏捷开发看板工具分享
  8. Linux执行可执行文件提示No such file or directory的解决方法
  9. python字典存储省份与城市_在Python中存储字典路径
  10. 有多少人在51job上找到工作_人不在日本,找到日本工作的最佳方案