def deal_with_data(self): ''' 得到需求数据 :return: ''' data = self.result_data # pprint(data) if data != {}: taobao = TaoBaoLoginAndParse(logger=self.my_lg) goods_id = data['goods_id'] # 天猫类型 tmall_type = data.get('type', 33) # 33用于表示无法正确获取 # self.my_lg.info(str(tmall_type)) # 店铺名称 shop_name = data['seller'].get('shopName', '') # 可能不存在shopName这个字段 # 掌柜 account = data['seller'].get('sellerNick', '') # 商品名称 title = data['item']['title'] # 子标题 sub_title = data['item'].get('subtitle', '') sub_title = re.compile(r'\n').sub('', sub_title) # 店铺主页地址 # shop_name_url = 'https:' + data['seller']['taoShopUrl'] # shop_name_url = re.compile(r'.m.').sub('.', shop_name_url) # 手机版转换为pc版 # 商品价格 # price = data['apiStack'][0]['value']['price']['extraPrices'][0]['priceText'] tmp_taobao_price = data['apiStack'][0].get( 'value', '').get('price').get('price').get('priceText', '') tmp_taobao_price = tmp_taobao_price.split( '-') # 如果是区间的话,分割成两个,单个价格就是一个 # self.my_lg.info(str(tmp_taobao_price)) if len(tmp_taobao_price) == 1: # 商品最高价 # price = Decimal(tmp_taobao_price[0]).__round__(2) # json不能处理decimal所以后期存的时候再处理 price = tmp_taobao_price[0] # 商品最低价 taobao_price = price # self.my_lg.info(str(price)) # self.my_lg.info(str(taobao_price)) else: # price = Decimal(tmp_taobao_price[1]).__round__(2) # taobao_price = Decimal(tmp_taobao_price[0]).__round__(2) price = tmp_taobao_price[1] taobao_price = tmp_taobao_price[0] # self.my_lg.info(str(price)) # self.my_lg.info(str(taobao_price)) # 商品库存 goods_stock = data['apiStack'][0]['value'].get('skuCore', {}).get( 'sku2info', {}).get('0', {}).get('quantity', '') # 商品标签属性名称,及其对应id值 detail_name_list, detail_value_list = taobao._get_detail_name_and_value_list( data=data) ''' 每个标签对应值的价格及其库存 ''' price_info_list = taobao._get_price_info_list( data=data, detail_value_list=detail_value_list) # 所有示例图片地址 all_img_url = taobao._get_all_img_url( tmp_all_img_url=data['item']['images']) # self.my_lg.info(str(all_img_url)) # 详细信息p_info p_info = taobao._get_p_info(tmp_p_info=data.get('props').get( 'groupProps')) # tmp_p_info 一个list [{'内存容量': '32GB'}, ...] if p_info != []: p_info = [{ 'id': 0, 'name': _i.get('p_name', ''), 'value': _i.get('p_value', ''), } for _i in p_info] ''' div_desc ''' # 手机端描述地址 if data.get('item', {}).get('taobaoDescUrl') is not None: phone_div_url = 'https:' + data['item']['taobaoDescUrl'] else: phone_div_url = '' # pc端描述地址 if data.get('item', {}).get('taobaoPcDescUrl') is not None: pc_div_url = 'https:' + data['item']['taobaoPcDescUrl'] # self.my_lg.info(phone_div_url) # self.my_lg.info(pc_div_url) div_desc = taobao.get_div_from_pc_div_url(pc_div_url, goods_id) # self.my_lg.info(div_desc) if div_desc == '': self.my_lg.error('该商品的div_desc为空! 出错goods_id: %s' % str(goods_id)) self.result_data = {} return {} # self.driver.quit() gc.collect() else: pc_div_url = '' div_desc = '' ''' 后期处理 ''' # 后期处理detail_name_list, detail_value_list detail_name_list = [{'spec_name': i[0]} for i in detail_name_list] # 商品标签属性对应的值, 及其对应id值 if data.get('skuBase').get('props') is None: pass else: tmp_detail_value_list = [ item['values'] for item in data.get('skuBase', '').get('props', '') ] # self.my_lg.info(str(tmp_detail_value_list)) detail_value_list = [] for item in tmp_detail_value_list: tmp = [i['name'] for i in item] # self.my_lg.info(str(tmp)) detail_value_list.append(tmp) # 商品标签属性对应的值 # pprint(detail_value_list) is_delete = self._get_is_delete(data=data, title=title) # self.my_lg.info('is_delete = %s' % str(is_delete)) if is_delete == 1: self.my_lg.info('@@@ 该商品已下架...') # 月销量 try: sell_count = str( data.get('apiStack', [])[0].get('value', {}).get('item', {}).get('sellCount', '')) except: sell_count = '0' # self.my_lg.info(sell_count) try: del taobao except: pass result = { 'shop_name': shop_name, # 店铺名称 'account': account, # 掌柜 'title': title, # 商品名称 'sub_title': sub_title, # 子标题 'price': price, # 商品价格 'taobao_price': taobao_price, # 淘宝价 'goods_stock': goods_stock, # 商品库存 'detail_name_list': detail_name_list, # 商品标签属性名称 'detail_value_list': detail_value_list, # 商品标签属性对应的值 'price_info_list': price_info_list, # 要存储的每个标签对应规格的价格及其库存 'all_img_url': all_img_url, # 所有示例图片地址 'p_info': p_info, # 详细信息标签名对应属性 'pc_div_url': pc_div_url, # pc端描述地址 'div_desc': div_desc, # div_desc 'sell_count': sell_count, # 月销量 'is_delete': is_delete, # 是否下架判断 'type': tmall_type, # 天猫类型 } # pprint(result) # self.my_lg.info(str(result)) # wait_to_send_data = { # 'reason': 'success', # 'data': result, # 'code': 1 # } # json_data = json.dumps(wait_to_send_data, ensure_ascii=False) # print(json_data) gc.collect() return result else: self.my_lg.info('待处理的data为空的dict, 该商品可能已经转移或者下架') # return { # 'is_delete': 1, # } return {}
def deal_with_data(self): """ 得到需求数据 :return: """ data = self.result_data # pprint(data) if data == {}: return self._data_error_init() taobao = TaoBaoLoginAndParse( logger=self.lg, is_real_times_update_call=self.is_real_times_update_call) goods_id = data['goods_id'] # 天猫类型 tmall_type = data.get('type', 33) # 33用于表示无法正确获取 # 可能不存在shopName这个字段 shop_name = data['seller'].get('shopName', '') account = data['seller'].get('sellerNick', '') title = data['item']['title'] sub_title = data['item'].get('subtitle', '') if sub_title is None: # 处理tm 2版为None的情况 sub_title = '' else: pass sub_title = re.compile(r'\n').sub('', sub_title) price, taobao_price = taobao._get_price_and_taobao_price(data=data) # 商品库存 goods_stock = data['apiStack'][0]['value']\ .get('skuCore', {})\ .get('sku2info', {})\ .get('0', {})\ .get('quantity', '') # 商品标签属性名称,及其对应id值 detail_name_list, detail_value_list = taobao._get_detail_name_and_value_list( data=data) # 上下架判断放在这里避免已下架的不进行taobao_price为空断言判断 is_delete = self._get_is_delete(data=data, title=title) # self.lg.info('is_delete: {}'.format(is_delete)) try: # 每个标签对应值的价格及其库存 price_info_list = taobao._get_price_info_list( data=data, detail_value_list=detail_value_list, is_delete=is_delete, ) # 多规格进行重新赋值 price, taobao_price = taobao._get_new_price_and_taobao_price_when_price_info_list_not_null_list( price_info_list=price_info_list, price=price, taobao_price=taobao_price, is_delete=is_delete) except Exception: self.lg.error('遇到错误[goods_id: {}]:'.format(goods_id), exc_info=True) return self._data_error_init() # 所有示例图片地址 all_img_url = taobao._get_all_img_url( tmp_all_img_url=data['item']['images']) # self.lg.info(str(all_img_url)) # tmp_p_info 一个list [{'内存容量': '32GB'}, ...] p_info = taobao._get_p_info( tmp_p_info=data.get('props').get('groupProps')) if p_info != []: p_info = [{ 'id': 0, 'name': _i.get('p_name', ''), 'value': _i.get('p_value', ''), } for _i in p_info] """div_desc""" div_desc = taobao.get_div_from_pc_div_url(goods_id=goods_id) # self.lg.info(div_desc) if div_desc == '': self.lg.error('该商品的div_desc为空! 出错goods_id: {}'.format(goods_id)) return self._data_error_init() else: pass """后期处理""" # 后期处理detail_name_list, detail_value_list detail_name_list = [{ 'spec_name': i[0], 'img_here': i[2], } for i in detail_name_list] # 商品标签属性对应的值, 及其对应id值 if data.get('skuBase').get('props') is None: pass else: tmp_detail_value_list = [ item['values'] for item in data.get('skuBase', '').get('props', '') ] # self.lg.info(str(tmp_detail_value_list)) detail_value_list = [] for item in tmp_detail_value_list: tmp = [i['name'] for i in item] # self.lg.info(str(tmp)) detail_value_list.append(tmp) # 商品标签属性对应的值 # pprint(detail_value_list) # 月销量 sell_count = '0' try: sell_count = str( data.get('apiStack', [])[0].get('value', {}).get('item', {}).get('sellCount', '')) # self.lg.info(sell_count) except: pass if target_str_contain_some_char_check( target_str=title, check_char_obj=CONTRABAND_GOODS_KEY_TUPLE): self.lg.info('违禁物品下架...') is_delete = 1 else: pass try: del taobao except: pass result = { 'shop_name': shop_name, # 店铺名称 'account': account, # 掌柜 'title': title, # 商品名称 'sub_title': sub_title, # 子标题 'price': price, # 商品价格 'taobao_price': taobao_price, # 淘宝价 'goods_stock': goods_stock, # 商品库存 'detail_name_list': detail_name_list, # 商品标签属性名称 'detail_value_list': detail_value_list, # 商品标签属性对应的值 'price_info_list': price_info_list, # 要存储的每个标签对应规格的价格及其库存 'all_img_url': all_img_url, # 所有示例图片地址 'p_info': p_info, # 详细信息标签名对应属性 'div_desc': div_desc, # div_desc 'sell_count': sell_count, # 月销量 'is_delete': is_delete, # 是否下架判断 'type': tmall_type, # 天猫类型 } # pprint(result) # self.lg.info(str(result)) # wait_to_send_data = { # 'reason': 'success', # 'data': result, # 'code': 1 # } # json_data = dumps(wait_to_send_data, ensure_ascii=False) # print(json_data) return result