recommendspider.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # spiders/recommendspider.py
  2. from typing import List, Dict, Optional
  3. from spiders.basespider import BaseSpider
  4. from core.utils.extractors import safe_extract
  5. class RecommendSpider(BaseSpider):
  6. """推荐模式爬虫 - 重新封装版本"""
  7. def __init__(self, rule_dict: Dict, user_list: List, env: str = "prod",
  8. request_client=None, db_service=None, mq_producer=None):
  9. super().__init__(rule_dict, user_list, env, request_client, db_service, mq_producer)
  10. self.last_response = None
  11. async def execute(self):
  12. """执行核心逻辑 - 使用 make_request 方法"""
  13. iteration = 0
  14. while iteration < self.loop_times and await self.is_video_count_sufficient():
  15. self.logger.info(f"执行第 {iteration + 1} 轮")
  16. # 准备请求体
  17. request_body = self.request_preparer.prepare(
  18. self.request_body_template,
  19. self.last_response or {}
  20. )
  21. # 发送请求 - 使用 make_request 方法
  22. response = await self.make_request(request_body)
  23. if not response:
  24. self.logger.info("未获取到响应数据")
  25. iteration += 1
  26. await self.wait_between_iterations()
  27. continue
  28. self.last_response = response
  29. # 提取数据
  30. data_list = safe_extract(response, self.data_path)
  31. # 处理数据
  32. await self.process_data(data_list)
  33. iteration += 1
  34. await self.wait_between_iterations()