Scrapy从入门到精通(5)--下载文件和图片

Scrapy从入门到精通系列前四篇已经讲了从网页中获取信息的方法,除此之外,爬虫也可以从网页中下载图片、视频、word、pdf、压缩包等

FilesPipeline和ImagePipeline

Scarpy框架内部提供了这两个Item Pipeline专门用来下载文件和图片
可以将它们视为特殊下载器,给他们url,就会自动下载到本地,并将下载结果存入item的另一个特殊字段,以便用户在导出文件中查阅

FilesPipeline

例子

<html>
    <body>
        <a href='/book/sg.pdf'>下载《三国》</a>
        <a href='/book/sg.pdf'>下载《水浒》</a>
        <a href='/book/sg.pdf'>下载《红楼》</a>
        <a href='/book/sg.pdf'>下载《西游》</a>

    </body>
</html>
  1. 在配置文件settings.py中启用FilesPipeline,通常将其置于首位
ITEM_PIPELINES = {'scrapy.pipelines.files.FilesPipeline':1}
  1. 在配置文件settings.py中指定下载目录
FILES_STORE = '/home/liushuo/Download/scrapy'

3.在Spider解析一个包含文件下载链接的页面, 将所有url地址收集到一个列表,赋值给item的file_urls字段(item[‘file_urls’]).

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

当FilePipeline下载完item[‘file_urls’]中所有文件中,各文件的下载结果信息收集到另一个列表,赋给item的files字段(item[‘files’]),下载结果信息包含以下

  • path 文件下载到本地路径(相当于FILES_STORE的相对路径)
  • Checksum 文件的校验和
  • URL 文件和URL地址

    ImagesPipeline使用说明

    图片也是文件,所以下载图片本质上也是下载文件
    ImagesPipeline和FilesPiplines使用类似,只是在使用item字段和配置选项上略有差别

         - ImagesPipeline                             FilePipeline
    

    scrapy.pipelines.ImagesPipline 2 scrapy.pipelines.files.FilesPipline
    file_urls,files 2 image_urls,images
    FILES_STORE 2IMAGES_STORE

ImagesPipeline在FilesPipleline的基础上针对图片增加一些特有功能:

  • 为图片生成缩略图
 开启该功能,在配置文件中设置IMAGES_THUMBS,他是一个字典,每一项的值是缩略图的尺寸
`IMAGES_THUMBS = {
     - 'small':(50,50),
     - 'big':(270,270),
     - }`
  • 过滤掉尺寸过小的图片
设置IMGAES_MIN_WIDTH和IMAGES_MIN_HEIGHT,
IMGAES_MIN_WIDTH = 110
IMAGES_MIN_HEIGHT = 110

项目实战:下载360图片

http://images.so.com

项目需求
爬去360图片艺术类
页面分析
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39381833/article/details/81053255
今日推荐