def receive_seed_and_start_crawl(self, seed):
        """接受种子
        拿出url
        带cookie
        完成请求
        """
        print('\n开始抓取')
        url = seed.get('url')
        # 一个反馈,请求一个cookie
        print('请求种子和cookie')
        self.feed_back_seed(seed, cookie=False)
        cookie = wait_for_msg_long(ssn_que_p)
        data = self.user_define_request(url, cookie)
        # 首先验证data是有有效
        if data and data != ['null']:
            # 先反馈
            self.feed_back_seed(seed, cookie=True)
            # 放数据
            seed.update({'data': data})
            # 丢入持久化队列里
            redis_cli.lpush(psm_que, dumps_json(seed))
            print('有数据,放入持久化队列')
        else:
            # 反馈该cookie失效
            seed.update({'cookie_status': 1})
            # 这里犯了一个大错,就是cookie呢  09/10
            seed.update({'cookie': cookie})
            # 丢入反馈队列里
            self.feed_back_seed(seed, cookie=True)
            print('完成反馈')

        # 他的生命循环完成
        del seed
    def receive_seed_and_start_crawl(self, seed):
        """接受种子
        拿出url
        带cookie
        完成请求
        """

        print('\nspider获取任务')
        url = seed.get('url')
        # 一个反馈,请求一个cookie
        print('请求种子和cookie')

        self.feed_back_seed(seed, session=True, seed=False)

        # 等待cookie
        cookie = wait_for_msg_long(ssn_2_slv)

        # 实例化请求,解析模块
        rm = RequestModel(self.mark)
        data = rm.user_define_request(url, cookie)

        # 首先验证data是有有效
        if data != ['redirect'] and data != ['null'] and data != []:
            # 先反馈, 这时候只需要向种子管理反馈
            self.feed_back_seed(seed, session=False, seed=True)
            # 放数据
            seed.update({'data': data})
            # 丢入持久化队列里
            print('有数据,放入持久化队列\n')
            redis_cli.lpush(slv_2_psm, dumps_json(seed))

        elif data == ['redirect']:
            # 反馈该cookie失效, 需要向两个队列同时反馈
            seed_b = deepcopy(seed)
            seed_b.update({'cookie_status': 1})
            # 这里犯了一个大错,就是cookie呢  09/10
            seed_b.update({'cookie': cookie})
            # 丢入反馈队列里
            self.feed_back_seed(seed_b, session=True, seed=True)
            print('cookie失效,完成反馈\n')
            del seed_b

        else:
            # 没有数据,cookie仍旧是有效的
            # 只需要向种子管理反馈
            self.feed_back_seed(seed, session=False, seed=True)
            print('没有数据, 完成反馈\n')

        # 他的生命循环完成
        del seed
        del rm
Exemple #3
0
    def seed_main_logic(self):
        """
        主要处理逻辑
        1. 生产种子
        2. 提取种子
        3. 检测状态
        """
        print('seed管理已启动')
        # 完成后像队里推送一条已完成启动
        que = config.task_que_fb
        ctx = dumps_json({'sedm': 'done'})
        redis_cli.lpush(que, ctx)

        # 更新车系
        update_brands_serise()
        # 第一步就是生产种子
        print('生产种子')
        self.seeds_maker()
        # 完了后先丢20个种子
        self.decide_push_seed_2_queue(0)

        # 开始监听队列,准备投放种子
        slv_2_sed = config.slv_2_sed
        while True:
            msg = wait_for_msg_long(slv_2_sed)
            print('{0}\t接收反馈'.format(
                datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')))
            if msg:
                # 开始处理这个反馈
                # 主要看 cookie_status
                is_deal = self.deal_feed_back(msg)
                if is_deal:
                    msg.update({'cookie_status': 0})
                    self.push_seed_2_queue(msg)
                    continue
                else:
                    # 通过的话,则上传一个新的种子
                    self.decide_push_seed_2_queue(1)
                print('完成推送')
            time.sleep(0.1)
    def session_main_logic(self):
        """
        由slave调用的部分
        实例化后,实现登录
        在 删除,导入列表时候通过消息通信来完成
        需要加一个结束模块

        #09-05 解决bug
        等待机制:
            当收到第一个请求触发
            统计数量
            放入队列
        """
        print('session管理已启动')
        # 实例化我们的种子模块,并开始登录
        self.logic_add_cookie()
        # # 并把所有的cookie都扔到消息队列里去
        # self.decide_psuh_cookie_2_que(0)

        # 完成后像队里推送一条已完成启动
        que = config.task_que_fb
        ctx = dumps_json({'ssnm': 'done'})
        redis_cli.lpush(que, ctx)
        # 开始监听反馈队列
        print('开始监听ssn_req队列')
        slv_2_ssn = config.slv_2_ssn
        while True:
            msg_list = []
            msg = wait_for_msg_long(slv_2_ssn)
            print(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S'),
                  '\t接受反馈')
            msg_list.append(msg)
            # 只要有消息来了,先处理,再就发一条cookie出去
            is_deal = self.deal_feed_back(msg_list)
            if not is_deal:
                self.decide_psuh_cookie_2_que(1)
            print('完成cookie派发\n')
            """