赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
精通Scrapy爬虫:25、Scrapy模拟登录
精通Scrapy爬虫:24、登录实质
精通Scrapy爬虫:23、项目实战:下载360图片
精通Scrapy爬虫:22、项目实战:爬取matplotlib例子源码文件
精通Scrapy爬虫:21、下载文件和图片:FilesPipeline和ImagesPipeline
精通Scrapy爬虫:20、项目练习
精通Scrapy爬虫:16、使用LinkExtractor提取链接
精通Scrapy爬虫:19、Exporter添加导出数据格式
精通Scrapy爬虫:18、使用Exporter导出数据
精通Scrapy爬虫:17、LinkExtractor描述提取规则
精通Scrapy爬虫:15、将数据存入MongoDB
精通Scrapy爬虫:14、过滤重复数据
精通Scrapy爬虫:13、Item Pipeline
精通Scrapy爬虫:12、Field元数据
精通Scrapy爬虫:11、Item和Field
精通Scrapy爬虫:10、CSS选择器
精通Scrapy爬虫:9、XPath
精通Scrapy爬虫:8、Response内置Selector
精通Scrapy爬虫:7、Selector对象
精通Scrapy爬虫:6、Spider开发流程
精通Scrapy爬虫:5、Request和Response对象
精通Scrapy爬虫:4、Scrapy框架结构及工作原理
精通Scrapy爬虫:3、编写第一个Scrapy爬虫
精通Scrapy爬虫:2、Scrapy简介及安装
精通Scrapy爬虫:1、网络爬虫是什么
精通Scrapy爬虫:21、下载文件和图片:FilesPipeline和ImagesPipeline
资源编号:75951
精通Scrapy
爬虫
热度:29
在之前的章节中,我们学习了从网页中爬取信息的方法,这只是爬虫最典型的一种应用,除此之外,下载文件也是实际应用中很常见的一种需求,例如使用爬虫爬取网站中的图片、视频、WORD文档、PDF文件、压缩包等。本章来学习在Scrapy中如何下载文件和图片。
在之前的章节中,我们学习了从网页中爬取信息的方法,这只是爬虫最典型的一种应用,除此之外,下载文件也是实际应用中很常见的一种需求,例如使用爬虫爬取网站中的图片、视频、WORD文档、PDF文件、压缩包等。本章来学习在Scrapy中如何下载文件和图片。 Scrapy框架内部提供了两个Item Pipeline,专门用于下载文件和图片: ● FilesPipeline ● ImagesPipeline 我们可以将这两个Item Pipeline看作特殊的下载器,用户使用时只需要通过item的一个特殊字段将要下载文件或图片的url传递给它们,它们会自动将文件或图片下载到本地,并将下载结果信息存入item的另一个特殊字段,以便用户在导出文件中查阅。下面详细介绍如何使用它们。 # 1、FilesPipeline使用说明 通过一个简单的例子讲解FilesPipeline的使用,在如下页面中可以下载多本PDF格式的小说: ...
下载《三国演义》
下载《水浒传》
下载《红楼梦》
下载《西游记》
... 使用FilesPipeline下载页面中所有PDF文件,可按以下步骤进行: 步骤 01 在配置文件settings.py中启用FilesPipeline,通常将其置于其他Item Pipeline之前: ITEM_PIPELINES = {'scrapy.pipelines.files.FilesPipeline': 1} 步骤 02 在配置文件settings.py中,使用FILES_STORE指定文件下载目录,如: FILES_STORE = '/home/liushuo/Download/scrapy' 步骤 03 在Spider解析一个包含文件下载链接的页面时,将所有需要下载文件的url地址收集到一个列表,赋给item的file_urls字段(item['file_urls'])。FilesPipeline在处理每一项item时,会读取item['file_urls'],对其中每一个url进行下载,Spider示例代码如下: class DownloadBookSpider(scrapy.Spider): ... def parse(response): item = {} # 下载列表 item['file_urls'] = [] for url in response.xpath('//a/@href').extract(): download_url = response.urljoin(url) # 将url 填入下载列表 item['file_urls'].append(download_url) yield item 当FilesPipeline下载完item['file_urls']中的所有文件后,会将各文件的下载结果信息收集到另一个列表,赋给item的files字段(item['files'])。下载结果信息包括以下内容: ● Path文件下载到本地的路径(相对于FILES_STORE的相对路径)。 ● Checksum文件的校验和。 ● url文件的url地址。 # 2、ImagesPipeline使用说明 图片也是文件,所以下载图片本质上也是下载文件,ImagesPipeline是FilesPipeline的子类,使用上和FilesPipeline大同小异,只是在所使用的item字段和配置选项上略有差别,如表9-1所示。 ![bs64](https://img.handsomemark.com/2019/10/19/01dc4810-f23c-11e9-8194-acde48001122.png) 表9-1 ImagesPipeline和FilesPipeline ImagesPipeline在FilesPipleline的基础上针对图片增加了一些特有的功能: ● 为图片生成缩略图 开启该功能,只需在配置文件settings.py中设置IMAGES_THUMBS,它是一个字典,每一项的值是缩略图的尺寸,代码如下: IMAGES_THUMBS = { 'small': (50, 50), 'big': (270, 270), } 开启该功能后,下载一张图片时,本地会出现3张图片(1张原图片,2张缩略图),路径如下: [IMAGES_STORE]/full/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg [IMAGES_STORE]/thumbs/small/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg [IMAGES_STORE]/thumbs/big/63bbfea82b8880ed33cdb762aa11fab722a90a24.jpg ● 过滤掉尺寸过小的图片 开启该功能,需在配置文件settings.py中设置IMAGES_MIN_WIDTH和IMAGES_MIN_HEIGHT,它们分别指定图片最小的宽和高,代码如下: IMAGES_MIN_WIDTH = 110 IMAGES_MIN_HEIGHT = 110 开启该功能后,如果下载了一张105×200的图片,该图片就会被抛弃掉,因为它的宽度不符合标准。