Python爬虫学习11-自定义Pipelines

settings.py中有一个ITEM_PIPELINES的选项,把它的注释去掉增加下载图片的代码:

ITEM_PIPELINES = {
   'articlespider.pipelines.ArticlespiderPipeline': 300,
    'scrapy.pipelines.images.ImagesPipeline': 1, #这个是scrapy自带的图片下载pipelines
}
IMAGES_URLS_FIELD = "front_image_url"
project_dir = os.path.abspath(os.path.dirname(__file__))
IMAGES_STORE = os.path.join(project_dir, 'images')

上面的代码启用了下载图片piplines,并定义了存储地址及想要存储的图片地址。
在settings.py同级目录下建立文件夹images用来保存图片。当运行爬虫时,图片就会自动下载图片并保存到本地。
如果想要得到存储的图片路径的话,需要自定义pipelines。

pipelines.py中,引入from scrapy.pipelines.images import ImagesPipeline,自定义的pipeline需要对自带的ImagesPipeline进行重载,代码如下:

class ArticleimagePipeline(ImagesPipeline):
    def item_completed(self, results, item, info):
        pass

pass处定义一个断点,并进行调试:

Python爬虫学习11-自定义Pipelines_第1张图片
Paste_Image.png

在调试结果里,可以发现 results结果为一个 tuple,第一个值是否图片获得成功第二个值为一个字典,保存图片路径 path等信息。
完成代码如下:

class ArticleimagePipeline(ImagesPipeline):
    def item_completed(self, results, item, info):
        for ok, value in results:
            image_path = value['path']
        item["front_image_path"] = image_path
        return item

上面代码得到image_path保存到item["front_image_path"]中并返回,这时会根据pipelines的顺序进行下一个pipelines进行处理。通过断点调试可以得到想要的结果。

Python爬虫学习11-自定义Pipelines_第2张图片
Paste_Image.png

你可能感兴趣的:(Python爬虫学习11-自定义Pipelines)