美文网首页
教你如何利用scrapy 管道 (pipeline.py),模块

教你如何利用scrapy 管道 (pipeline.py),模块

作者: xu一直在路上 | 来源:发表于2018-03-17 15:20 被阅读0次

    首先说说我的思路:
    1,存图片时我想存在本地
    2,存图片时我想保存图片原有的名字,(以后好方便查询)

    首先 看看官方 API
    import scrapy
    from scrapy.pipelines.images import ImagesPipeline
    from scrapy.exceptions import DropItem
    
    class MyImagesPipeline(ImagesPipeline):
    
        def get_media_requests(self, item, info):
            for image_url in item['image_urls']:
                yield scrapy.Request(image_url)
    
        def item_completed(self, results, item, info):
            image_paths = [x['path'] for ok, x in results if ok]
            if not image_paths:
                raise DropItem("Item contains no images")
            item['image_paths'] = image_paths
            return item
    
    

    下面是我的改进,我则是想保存图片原有名字

    import scrapy
    class ImagedownloadPipeline(object):
        def process_item(self, item, spider):
            return item
    class Imagedown(ImagesPipeline):
        def file_path(self, request, response=None, info=None):
            item = request.meta["item"]
            filename = item["img_name"].replace("/","-")+".jpg"#这里我想说明一下 我保存的图片名字 中有'/'个人感觉不协调,就用'-'代替。了注意加上后缀'.jpg' 不然保存不成功哦
            return filename
        def get_media_requests(self, item, info):
            '''
            #如果item[urls]里里面是列表,用下面
            urls= item['urls']
            for url in urls:
                yield scrapy.Request(url,meta={"item",item})
            '''
            # 如果item[urls]里里面是一个图片地址,用这下面的
            yield scrapy.Request(item['img_urls'], meta={"item": item})##切记这里的meta 传的时候 是一个字典
    

    在setting.py 中加入

    BOT_NAME = 'imagedownload'
    IMAGES_STORE = "e:/pics"#(注意这里表示你图片保存的地址)
    ITEM_PIPELINES = {'imagedownload.pipelines.Imagedown': 300}
    

    到此scrapy 里面的主要设置已经介绍完毕,希望对你们有所帮助,

    相关文章

      网友评论

          本文标题:教你如何利用scrapy 管道 (pipeline.py),模块

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