1 min read

scrapy 实战(二)如何爬取页面中的图片信息

scrapy 实战(二)如何爬取页面中的图片信息

上次说到了,如何构建一个爬虫系统,并介绍了下怎么利用scrapy解析页面信息。

这次介绍下如何爬去页面中的图片。

这里还是以 www.guoku.com 为例。

首先,需要在你的 scrapy 的 settings.py 加入一下配置

    ITEM_PIPELINES = {  
        'scrapy.pipelines.images.ImagesPipeline': 1  
    }
    IMAGES_STORE = '/tmp/images'  #设置下载图片的目录

然后,EntityItem 加入image_urls, 和 images 字段

    class EntityItem(scrapy.Item):  
        brand   = scrapy.Field(  
            input_processor=MapCompose(remove_tags),  
            output_processor=TakeFirst(),  
        )  
        title   = scrapy.Field(  
            input_processor=MapCompose(remove_tags),  
            output_processor=TakeFirst(),  
        )  
        price   = scrapy.Field(  
            input_processor=MapCompose(remove_tags),  
            output_processor=TakeFirst(),  
        )  
        image_urls  = scrapy.Field()       # 这个字段是页面中图片的 URL
        images     = scrapy.Field()        # 这个字段代表 图片下载到本地后的路径。

最后,还是要解析下html 页面来提取 图片链接

    def pares_entity(self, response):  
        self.logger.info(response.url)  
      
        item            = ItemLoader(item=EntityItem(), response=response)  
        item.add_css('brand', 'div.brand')  
        item.add_css('title', 'div.entity-title')  
        item.add_css('price', 'div.price-tag > span', re='(\d+\.\d+)')  
        
        #这里就是提取 html 中我们需要下载的图片链接
        item.add_css('image_urls', 'div.other-pic-list > a > img::attr(src)')
        return item.load_item()
    

注:

这里我使用了 ItemLoader 来构建 一个商品实例。具体怎么用可以参考 >>
scrapy.org <<。

项目源代码