Parcourir la source

fix bug:修复 failed_times 逻辑错误

dongzhaorui il y a 2 ans
Parent
commit
0bb87cc857
1 fichiers modifiés avec 18 ajouts et 20 suppressions
  1. 18 20
      FworkSpider/feapder/core/spiders/spider.py

+ 18 - 20
FworkSpider/feapder/core/spiders/spider.py

@@ -519,6 +519,18 @@ class BusinessBaseDetailSpider(Spider):
             if is_delete:
                 self.to_db.delete(coll_name=self.db_name, condition=task)
 
+    def create_failed_item(self, request, response, **kwargs):
+        result = kwargs.pop("origin_data")
+        failed_times = int(result.pop("failed_times", 0)) + 1
+        item = Item(origin_data=result, failed_times=failed_times)
+        item.table_name = self.err_coll_name
+        item.err_reason = getattr(request, "error_msg", "")
+        item.status_code = getattr(response, "status_code", -1)
+        item.create_at = tools.ensure_int64(tools.get_current_timestamp())
+        item.origin = self.db_name
+        item.spidercode = result["spidercode"]
+        return item
+
     @property
     def to_db(self):
         if not self._to_db:
@@ -540,16 +552,9 @@ class BiddingDetailSpider(BusinessBaseDetailSpider):
 
     def failed_request(self, request, response):
         """请求、解析错误次数超过上限后,将原信息重新保存至数据库,并修改failed字段"""
-        _data = request.base_info if isinstance(request.base_info, dict) else request.base_info.to_dict
-        item = Item(origin_data=_data)
-        item.table_name = self.err_coll_name
-        item.status_code = getattr(response, "status_code", -1)
-        item.err_reason = getattr(request, "error_msg", "")
-        item.failed_times = int(getattr(item, "failed_times", 0)) + 1
-        item.create_at = tools.ensure_int64(tools.get_current_timestamp())
-        item.origin = self.db_name
-        item.spidercode = _data["spidercode"]
-        yield item
+        item = request.base_info if isinstance(request.base_info, dict) else request.base_info.to_dict
+        failed_item = self.create_failed_item(request, response, origin_data=item)
+        yield failed_item
 
 
 class PlanToBuildListSpider(BusinessBaseListSpider):
@@ -566,13 +571,6 @@ class PlanToBuildDetailSpider(BusinessBaseDetailSpider):
 
     def failed_request(self, request, response):
         """请求、解析错误次数超过上限后,将原信息重新保存至数据库,并修改failed字段"""
-        _data = request.item if isinstance(request.item, dict) else request.item.to_dict
-        item = Item(origin_data=_data)
-        item.table_name = self.err_coll_name
-        item.status_code = getattr(response, "status_code", -1)
-        item.failed_times = int(getattr(item, "failed_times", 0)) + 1
-        item.err_reason = getattr(request, "error_msg", "")
-        item.create_at = tools.ensure_int64(tools.get_current_timestamp())
-        item.origin = self.db_name
-        item.spidercode = _data["spidercode"]
-        yield item
+        item = request.item if isinstance(request.item, dict) else request.item.to_dict
+        failed_item = self.create_failed_item(request, response, origin_data=item)
+        yield failed_item