python爬虫之Scrapy介绍六——下载图片或者文件

    技术2025-02-11  36

    本篇博文主要介绍利用scrapy内置的下载模块来下载文件和图片。相对于自己撰写的代码,它具有如下特点:

    1:避免重新下载最近已经下载过的数据 2:可以方便的指定文件存储的路径 3:可以将下载的图片转换成通用的格式。如:png,jpg 4:可以方便的生成缩略图 5:可以方便的检测图片的宽和高,确保他们满足最小限制 6:异步下载,效率非常高

    1 Scrapy下载图片

    使用images pipeline 下载文件步骤: 1) 定义好一个Item,然后在这个item中定义两个属性,分别为image_urls以及images。 image_urls是 用来存储需要下载的文件的url链接,需要给一个列表 当文件下载完成后,会把文件下载的相关信息存储到item的images属性中。如下载路径、下 载的url和图片校验码等 2)在配置文件settings.py中配置IMAGES_STORE, 这个配置用来设置文件下载路径 3)启动pipeline:在ITEM_ PIPELINES中设置scrapy.pipelines.images.ImagesPipeline:1

    本节通过下载图片案例 —— 爬取汽车之家图片来演示。 爬取汽车之家网址: https://www.autohome.com.cn/65/#levelsource=000000000_0&pvareaid=101594

    (1) 定义好一个Item,然后在这个item中定义两个属性,分别为image_urls以及images。

    import scrapy ''' items 文件 ''' class PcItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() image_urls = scrapy.Field() # 一个是图片的url images = scrapy.Field() # 保存图片的路径 pass

    (2)在配置文件settings.py中配置IMAGES_STORE, 这个配置用来设置文件下载路径(注意setting文件中注意把ROBOTSTXT_OBEY = False 设置一下,否则爬取不到图片)

    import os IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')

    (3)seting文件启动pipeline:在ITEM_ PIPELINES中设置scrapy.pipelines.images.ImagesPipeline:1

    # Configure item pipelines # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { # 'pic.pipelines.PicPipeline': 300, 'scrapy.pipelines.images.ImagesPipeline':1 }

    (4)爬虫代码

    import scrapy from pic.pc.items import PcItem class AudiSpider(scrapy.Spider): name = 'car' allowed_domains = ['car.autohome.com.cn'] start_urls = ['https://car.autohome.com.cn/photolist/series/44501/5729675.html#pvareaid=3454450'] # https://car.autohome.com.cn/photolist/series/18/p2/ # https://car.autohome.com.cn/photolist/series/18/p3/ def parse(self, response): # 找ul下面的li ul = response.xpath('//ul[@id="imgList"]/li') for li in ul: # item = {} item = PcItem() # item['src'] = 'https:'+ li.xpath("./a/img/@src").extract_first() # 第一种 自己写代码 item['image_urls'] = ['https:'+ li.xpath("./a/img/@src").extract_first()] # 第二种 内置pipeline 所以pipeline文件不用去管 # print(item) yield item pass

    2 Scrapy下载文件

    同理于Scrapy下载图片,这里仅列示步骤 使用Files Pipeline下载文件,按照以下步骤完成: 1)定义好⼀个Item,然后在这个item中定义两个属性,分别为file_urls以及files。 files_urls是用来存储需要下载的文件的url链接,需要给⼀个列表 当文件下载完成后,会把⽂件下载的相关信息存储到item的files属性中。如下载路径、下载的url和文件校验码等 2)在配置文件settings.py中配置FILES_STORE,这个配置用来设置文件下载路径 3)启动pipeline:在ITEM_PIPELINES中设置 scrapy.piplines.files.FilesPipeline:1

    Processed: 0.011, SQL: 9