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

2017-01-19

上次说到了,如何构建一个爬虫系统,并介绍了下怎么利用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 <<。

项目源代码