zoukankan      html  css  js  c++  java
  • mongo 数据库存储

    mongo 数据库,获取有赞的数据.

    from app import mongo
    from app.external.yz.goods_api import YzGoodsApi
    from openpyxl import Workbook
    
    
    class YzGoods:
        # 初始化
        def __init__(self):
            self.yz_api_goods = YzGoodsApi()
            self.collection = mongo.db.yz_goods_bx
            self.collection_tag = mongo.db.yz_tags_bx
    
        # 抓取商品信息存入mongo数据库
        def storage_mongo_goods(self):
            gooods_itemid_list = self.get_goodslist()
    
            for itemid in gooods_itemid_list:
                goods = self.collection.find_one({"_id": itemid})
                if goods:
                    continue
                else:
                    goods = self.yz_api_goods.get_goods(item_id=itemid)
                    goods['_id'] = itemid
                    self.collection.insert_one(goods)
    
        # 抓取商品类目存入mongo数据库
        def storage_mongo_tags(self):
            self.collection_tag.remove({})
            page_size = 10
            page_no = 1
    
            while True:
                get_tagid = self.yz_api_goods.get_Taglist(page_no=page_no, page_size=page_size)
                for item in get_tagid:
                    self.collection_tag.insert_one(item)
    
                if len(get_tagid) < page_size:
                    break
                else:
                    page_no += 1
    
        def getgoods(self, item_id):
            goods = self.collection.find_one({"_id": item_id})
    
            if goods:
                return goods
            else:
                goods = self.yz_api_goods.get_goods(item_id=item_id)
                goods['_id'] = item_id
                self.collection.insert_one(goods)
            return goods
    
        # 获取商品id
        def get_goodslist(self):
    
            value_list = []
            page_size = 100
            page_no = 1
    
            while True:
                goods_list = self.yz_api_goods.get_goods_list(page_no=page_no, page_size=page_size, show_sold_out=2)
                keys = 'item_id'
                for out_dict in goods_list:
                    tmp = out_dict[keys]
                    value_list.append(tmp)
    
                if len(goods_list) < page_size:
                    break
                else:
                    print(page_no)
                    page_no += 1
    
            return value_list
    
        # 获取商品详细信息
        def get_goods_id(self):
            goods_list = self.get_goodslist()
            value_list = []
    
            for item_id in goods_list:
                id = item_id
                goods = self.getgoods(item_id=id)
                keys = (
                    'item_id', 'title', 'item_no', 'created', 'cid', 'tag_ids', 'quantity', 'sold_num',
                    'price'
                )
                # 好好理解这一块,字典,列表,字典里的值.循环取出的情况
                tmp = {}
                for keys in keys:
                    tmp[keys] = goods[keys]
    
                if 'skus' in goods and goods['skus']:
                    for sku in goods['skus']:
                        tmp['item_id'] = str(goods['item_id']) + '-' + str(sku['sku_id'])
                        value_list.append(tmp.copy())
                else:
                    tmp['item_id'] = str(goods['item_id'])
                    value_list.append(tmp.copy())
    
            return value_list
    
        def make_goods_excel(self):
            out_list = self.get_goods_id()
    
            # 创建excel工作簿
            wb = Workbook()
    
            # 第一个excel_sheet1
            ws = wb[wb.sheetnames[0]]
    
            x = 2
            y = 1
    
            #  外层循环字典的key ,里层循环字典的VALUER. 明白了.
            #  修改。思考一下,一个循环。
            for out_dict in out_list:
                dict_keys = out_dict.keys()
                out_dict["tags"] = out_dict['tag_ids'] if 'tag_ids' in dict_keys else out_dict[
                    'tag_id'] if 'tag_id' in dict_keys else ""
                if 'tag_ids' in dict_keys:
                    del out_dict['tag_ids']
                if "tag_id" in dict_keys:
                    del out_dict['tag_id']
    
            for entry in out_list:
                for key, item in entry.items():
                    value = item
                    if key == 'tags':
                        value = "/".join([str(t) for t in item])
    
                    ws.cell(row=x, column=y, value=value)
                    y = y + 1
                x += 1
                y = 1
    
            wb.save(R'C:UsersHBXDesktop工作201904业务激励分配商品表3.xlsx')
    
        def make_goods_id_excel(self):
    
            out_list = self.get_tagid()
    
            # 创建excel工作簿
            wb = Workbook()
    
            # 第一个excel_sheet1
            ws = wb[wb.sheetnames[0]]
    
            x = 2
            y = 1
    
            for out_dict in out_list:
                for item in out_dict:
                    values = out_dict[item]
    
                    ws.cell(row=x, column=y, value=values)
                    y = y + 1
    
                x += 1
                y = 1
    
            wb.save(R'C:UsersHBXDesktop工作201904业务激励分配商品表4.xlsx')
    
    
    if __name__ == '__main__':
        YzGoods().storage_mongo_tags()
        # YzGoods().make_goods_id_excel()
        # a = 1
  • 相关阅读:
    openwrt解压zstd包时报错"openwrt/dl/zstd-1.4.5.tar.zst: Permission denied tar: This does not look like a tar archive tar: Exiting with failure status due to previous errors"如何处理?
    pip如何使用代理?
    Markdown: 对Typora的一些小调整
    ray
    关于nginx中proxy_set_header的设置
    解决 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    mysql 查询慢问题分析
    Elasticsearch导出数据存入本地文件
    mysql count 几种写法时间的比较
    python 线程池的实现
  • 原文地址:https://www.cnblogs.com/sakura3/p/11099783.html
Copyright © 2011-2022 走看看