美文网首页
Scrapy框架的学习(pipeline介绍以及多个爬虫的pip

Scrapy框架的学习(pipeline介绍以及多个爬虫的pip

作者: 中v中 | 来源:发表于2022-08-03 15:02 被阅读0次

    1.从pipeline的字典形式可以看出来,pipeline可以有多个,而且确实pipeline能够定义多个

    1. 有多个爬虫,pipeline是怎样处理的呢?

    首先创建三个爬虫 : 例如: 在一个scrapy的项目里面爬取三个网站: 今日头条、新浪、豆瓣

    在cmd里面分别创建三个爬虫:


    图片.png

    然后打开pycharm查看:


    图片.png

    就会看见有三个爬虫

    1)使用pipeline处理的第一个方式可以给item加上键和响应的值:

    分别再相对的爬虫py里面,的parse方法里面加上相应的键和值

            """对应的toutiao.py"""
            def parse(self, response):
                item = {}
                item["come_from"] = "toutiao"
                pass
             
            """对应的sina.py"""
            def parse(self, response):
                item = {}
                item["come_from"] = "sina"
                pass
             
            """对应的douban.py"""
            def parse(self, response):
                item = {}
                item["come_from"] = "douban"
                pass
    

    然后pipelines.py 在 process_item方法里面可以对值进行相应的操作,分别进行判断

            class PipelinetestPipeline(object):
                def process_item(self, item, spider):
                    if item["come_from"] == "toutiao":
                        pass
                    elif item["come_from"] == "sina":
                        pass
                    else:
                        pass
                    return item
    
           也可以写多个类的形式进行: 
    
            class PipelinetestPipeline(object):
                def process_item(self, item, spider):
                    if item["come_from"] == "toutiao":
                        pass
                    return item
             
             
            class PipelinetestPipeline2(object):
                def process_item(self, item, spider):
                    if item["come_from"] == "sina":
                        pass
                    return item
             
             
            class PipelinetestPipeline3(object):
                def process_item(self, item, spider):
                    if item["come_from"] == "douban":
                        pass
    
    (2) 除了给item加上键和值,还有第二方式,  spider.name 来进行判断,就不用给item加键和值
    
            class PipelinetestPipeline(object):
                def process_item(self, item, spider):
                    if spider.name == "toutiao":
                        pass
                    elif spider.name == "sina":
                        pass
                    else:
                        pass
                    return item
    

    每个爬虫的类里面都有对应的name属性,也就是对应的每个爬虫的名字,所以可以利用这个属性来进行判断

      然后在pipeline里面进行相应的处理
    
    1. 对有多个爬虫时,pipeline通过上面的中方式进行处理,
           一种方式是给item加上键和值,一种方式是里面name属性
    
          分别对值或者爬虫的名字进行判断,进而对数据进行处理
    

    相关文章

      网友评论

          本文标题:Scrapy框架的学习(pipeline介绍以及多个爬虫的pip

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