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
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') """