scrapy分页抓取网页(下载及处理文件和图片Scrapy为下载器的应用)
优采云 发布时间: 2022-01-05 23:13scrapy分页抓取网页(下载及处理文件和图片Scrapy为下载器的应用)
下载和处理文件和图片
Scrapy 提供了一个可重用的 item 管道,用于下载 item 中收录的文件(例如,在抓取到产品时,还想保存相应的图像)。这些管道有一些通用的方法和结构(我们称之为媒体管道)。通常,您将使用 Files Pipeline 或 Images Pipeline。
两个管道都实现了以下功能:
1、避免重新下载最近下载过的数据;
2、指定存储介质的位置(文件系统目录、Amazon S3 存储桶)。图像管道有一些额外的功能来处理图像;
3、 将所有下载的图片转换为通用格式(JPG)和模式(RGB);
4、 缩略图生成;
5、 检测图片的宽/高,确保满足最小限制;
该管道还将为当前计划下载的图片保留一个内部队列,并将那些收录相同图片的到达项目连接到该队列。这样可以避免多个项目共享同一张图片的多次下载。
一、使用文件管道
使用 FilesPipeline 时,典型的工作流程如下:
1、 在爬虫中,你抓取一个item,把里面的图片的URL放到file_urls组中。
2、 项目从爬虫返回,进入项目管道。
3、当项目进入 FilesPipeline 时,file_urls 组中的 URL 会被 Scrapy 的调度器和下载器调度下载(这意味着调度器和下载器的中间件可以重复使用)。当优先级较高时,URL 将在其他页面被抓取之前进行处理。项目将在此特定管道阶段保持“锁定”状态,直到文件下载完成(或由于某种原因下载未完成)。
4、下载文件后,另一个字段(文件)将更新为结构。该组将收录一个字典列表,包括下载文件信息,例如下载路径、源爬取地址(从file_urls 组中获取)和图像校验和(checksum)。文件列表中文件的顺序将与源 file_urls 组一致。如果图片下载失败,将记录错误信息并且图片不会出现在文件组中。
二、使用图像管道
使用ImagesPipeline时,典型的工作流程如下:
1、在爬虫中,您抓取一个项目并将其中的图片的网址放入 image_urls 组中。
2、 项目从爬虫返回,进入项目管道。
3、当项目进入ImagesPipeline时,image_urls组中的URL会被Scrapy的调度器和下载器调度下载(这意味着调度器和下载器的中间件可以复用)。当优先级较高时,URL 将在其他页面被抓取之前进行处理。项目将在此特定管道阶段保持“锁定”状态,直到文件下载完成(或由于某种原因下载未完成)。
4、下载文件后,另一个字段(图像)将更新为结构。该组将收录一个字典列表,包括下载文件信息,例如下载路径、源爬取地址(从 image_urls 组中获取)和图像校验和(checksum)。文件列表中文件的顺序将与源 image_urls 组一致。如果图片下载失败,将记录错误信息并且图片不会出现在图像组中。
使用ImagesPipeline 与使用FilesPipeline 非常相似,除了使用的默认字段名称不同:您使用image_urls 作为项目的图片URL,并且会填写图片字段以获取有关下载图片的信息。
对图像文件使用 ImagesPipeline 的好处是可以配置一些附加功能,例如生成缩略图和根据大小过滤图像。
Pillow 用于生成缩略图并将图像规范化为 JPEG/RGB 格式,因此为了使用图像管道,您需要安装此库。Python Imaging Library (PIL) 在大多数情况下是有效的,但众所周知,在某些设置中会出现问题,因此我们建议使用 Pillow 而不是 PIL。
接下来,使用Images Pipeline 爬取花瓣网下载想要的图片。
1、新建一个项目,打开cmd,
进入scrapy startproject huaban_imagepipeline
新建筑