python爬虫框架scrapy学习第七课
目标:爬取网页图片并保存
爬取网页中的图片,将图片下载到本地。
执行:爬取简书7日热门文章的图片
目标网页:简书7日热门文章图片
图片管道ImagesPipeline
爬虫结果基于管道pipeline进行处理,针对爬取的图片数据,scrapy提供图片管道ImagesPipeline进行处理。
1.其特性如下:
- 将所有下载的图片转换成通用的格式(JPG)和模式(RGB)
- 避免重新下载最近已经下载过的图片
- 缩略图生成
- 检测图像的宽/高,确保它们满足最小限制
这个管道也会为那些当前安排好要下载的图片保留一个内部队列,并将那些到达的包含相同图片的项目连接到那个队列中。 这可以避免多次下载几个项目共享的同一个图片。
2.工作流如下:
- 在一个爬虫(自定义的爬虫类/文件),你抓取一个项目,把其中图片的URL放入 image_urls 组内(items文件定义)。
- 项目从爬虫内返回,进入项目管道(pipeline文件)。
- 当项目进入 ImagesPipeline,image_urls组内的URLs将被Scrapy的调度器和下载器(这意味着调度器和下载器的中间件可以复用)安排下载,当优先级更高,会在其他页面被抓取前处理。项目会在这个特定的管道阶段保持“locker”的状态,直到完成图片的下载(或者由于某些原因未完成下载)。
- 当图片下载完,另一个组(images)将被更新到结构中。这个组将包含一个字典列表,其中包括下载图片的信息,比如下载路径、源抓取地址(从image_urls 组获得)