当前位置 博文首页 > 明圣的博客:学习代理池时遇到的yield问题

    明圣的博客:学习代理池时遇到的yield问题

    作者:[db:作者] 时间:2021-08-07 15:45

    yield的理解:不知道从哪里运行,然后在测试函数中的前中后位置分别使用了三个print语句,可以比较清晰的分析出来

    def get_spider_from_settings(self):
        print('0spider')
        '''根据配置文件信息,获取爬虫对象列表'''
        #遍历配置文件中爬虫信息,获取每个爬虫全类名
        for full_class_name in PROXIES_SPIDERS:
            print('1spider')
            module_name,class_name = full_class_name.rsplit('.',maxsplit=1)
            #根据模块名,导入模块
            module = importlib.import_module(module_name)
            #根据类名,从模块中,获取类
            cls = getattr(module,class_name)
            #创建爬虫对象
            spider = cls()
            print('2spider')
            #返回一个列表形式(生成器),可以方便进行遍历;也可以在for循环前面自己设置一个列表,但是没有yield方便
            yield spider
    
    if __name__ == '__main__':
        rs = RunSpider()
        rs1 =  rs.get_spider_from_settings()
        for i in rs1:
            print(i)
    

    执行结果:

    0spider
    1spider
    2spider
    <core.proxy_spider.proxy_spiders.kuaiSpider object at 0x000002A0042C7B50>
    1spider
    2spider
    <core.proxy_spider.proxy_spiders.XiciSpider object at 0x000002A0042C78E0>
    1spider
    2spider
    <core.proxy_spider.proxy_spiders.ip3366Spider object at 0x000002A0042C7B50>
    1spider
    2spider
    <core.proxy_spider.proxy_spiders.proxylistplusSpider object at 0x000002A0042C78E0>
    
    Process finished with exit code 0
    
    cs