|
@@ -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
|