recommendspider.py 1.6 KB

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