6.2.Scrapy获取图像
我们基于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获取图像相关推荐
- Python 爬虫框架Scrapy安装汇总
传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...
- Python:爬虫框架Scrapy的安装与基本使用
一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...
- Python:Scrapy实战项目手机App抓包爬虫
1. items.py class DouyuspiderItem(scrapy.Item):name = scrapy.Field()# 存储照片的名字imagesUrls = scrapy.Fie ...
- Python:Scrapy的settings
Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...
- Python:Scrapy Shell
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...
- Python:Scrapy的安装和入门案例
Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...
- Python:Scrapy 框架简单介绍
Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- 『Scrapy』爬虫框架入门
框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...
最新文章
- SparkSQL读取文件时,数据字段类型调整
- springboot+sockjs进行消息推送(群发)
- 1800万元砸向子公司 点击网络巩固SaaS业务
- Matlab中错误使用mex
- postsql时间计算
- 关于亿图图示缩放锁定1%的问题
- VB.NET中Socket编程
- 一群人在网上直播自己怎么写代码,而且还有人爱看
- 无人机协同搜索matlab,一种多无人机协同目标搜索方法与流程
- java获取上个月15号_java获取当前上一周、上一月、上一年的时间
- Word模板导出更新目录
- 高通推出通过以太网供电的小型蜂窝芯片
- 戴尔要求DEC雇员扔掉Mac
- 案例解读 | 重视管理会计,让永辉超市从生鲜市场破局
- 焊接过程中数据采集管理软件设计与应用综述
- Uboot中的MIPI DSI clk分析
- Python 生成图片验证码(详解)
- AT1983 [AGC001E] BBQ Hard
- Google Earth Engine python ——从谷歌地球引擎(GEE)上的点提取栅格值的实现
- 织梦cms模板-织梦自适应模板-织梦模板