123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- # spiders/recommendspider.py
- from typing import List, Dict, Optional
- from spiders.basespider import BaseSpider
- from core.utils.extractors import safe_extract
- class RecommendSpider(BaseSpider):
- """推荐模式爬虫 - 重新封装版本"""
- def __init__(self, rule_dict: Dict, user_list: List, env: str = "prod",
- request_client=None, db_service=None, mq_producer=None):
- super().__init__(rule_dict, user_list, env, request_client, db_service, mq_producer)
- self.last_response = None
- async def execute(self):
- """执行核心逻辑 - 使用 make_request 方法"""
- iteration = 0
- while iteration < self.loop_times and await self.is_video_count_sufficient():
- self.logger.info(f"执行第 {iteration + 1} 轮")
- # 准备请求体
- request_body = self.request_preparer.prepare(
- self.request_body_template,
- self.last_response or {}
- )
- # 发送请求 - 使用 make_request 方法
- response = await self.make_request(request_body)
- if not response:
- self.logger.info("未获取到响应数据")
- iteration += 1
- await self.wait_between_iterations()
- continue
- self.last_response = response
- # 提取数据
- data_list = safe_extract(response, self.data_path)
- # 处理数据
- await self.process_data(data_list)
- iteration += 1
- await self.wait_between_iterations()
|