美文网首页
Python爬虫学习11-自定义Pipelines

Python爬虫学习11-自定义Pipelines

作者: MingSha | 来源:发表于2017-04-03 13:46 被阅读0次

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处定义一个断点,并进行调试:

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进行处理。通过断点调试可以得到想要的结果。

Paste_Image.png

相关文章

网友评论

      本文标题:Python爬虫学习11-自定义Pipelines

      本文链接:https://www.haomeiwen.com/subject/mvznottx.html