mdbq 3.8.4__py3-none-any.whl → 3.8.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mdbq/__version__.py +1 -1
- mdbq/aggregation/query_data.py +22 -20
- mdbq/spider/aikucun.py +17 -5
- {mdbq-3.8.4.dist-info → mdbq-3.8.6.dist-info}/METADATA +1 -1
- {mdbq-3.8.4.dist-info → mdbq-3.8.6.dist-info}/RECORD +7 -7
- {mdbq-3.8.4.dist-info → mdbq-3.8.6.dist-info}/WHEEL +0 -0
- {mdbq-3.8.4.dist-info → mdbq-3.8.6.dist-info}/top_level.txt +0 -0
mdbq/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION = '3.8.
|
1
|
+
VERSION = '3.8.6'
|
mdbq/aggregation/query_data.py
CHANGED
@@ -2921,9 +2921,11 @@ class MysqlDatasQuery:
|
|
2921
2921
|
start_date, end_date = self.months_data(num=self.months)
|
2922
2922
|
projection = {
|
2923
2923
|
'日期': 1,
|
2924
|
-
'
|
2924
|
+
'平台': 1,
|
2925
|
+
'店铺名称': 1,
|
2926
|
+
'spuid': 1,
|
2925
2927
|
'商品名称': 1,
|
2926
|
-
'
|
2928
|
+
'品牌名': 1,
|
2927
2929
|
'商品款号': 1,
|
2928
2930
|
'一级类目名称': 1,
|
2929
2931
|
'二级类目名称': 1,
|
@@ -2936,7 +2938,7 @@ class MysqlDatasQuery:
|
|
2936
2938
|
'成交gmv': 1,
|
2937
2939
|
'供货额': 1,
|
2938
2940
|
'供货价': 1,
|
2939
|
-
'销售爱豆人数
|
2941
|
+
'销售爱豆人数': 1,
|
2940
2942
|
'支付人数_交易': 1,
|
2941
2943
|
'支付人数_成交': 1,
|
2942
2944
|
'销售量_成交': 1,
|
@@ -2949,34 +2951,34 @@ class MysqlDatasQuery:
|
|
2949
2951
|
'售罄率': 1,
|
2950
2952
|
'在架sku数': 1,
|
2951
2953
|
'可售sku数': 1,
|
2952
|
-
'sku数
|
2953
|
-
'sku数
|
2954
|
-
'
|
2955
|
-
'
|
2956
|
-
'店铺名称': 1,
|
2954
|
+
'下单sku数': 1,
|
2955
|
+
'成交sku数': 1,
|
2956
|
+
'图片': 1,
|
2957
|
+
'更新时间': 1,
|
2957
2958
|
}
|
2958
2959
|
projection = {}
|
2959
2960
|
df = self.download.data_to_df(
|
2960
2961
|
db_name='爱库存2',
|
2961
|
-
table_name='
|
2962
|
+
table_name='spu榜单',
|
2962
2963
|
start_date=start_date,
|
2963
2964
|
end_date=end_date,
|
2964
2965
|
projection=projection,
|
2965
2966
|
)
|
2966
|
-
df.
|
2967
|
-
|
2968
|
-
|
2969
|
-
|
2970
|
-
|
2971
|
-
|
2972
|
-
|
2973
|
-
|
2974
|
-
|
2975
|
-
|
2967
|
+
idx = df.groupby(['日期', '店铺名称', 'spuid'])['更新时间'].idxmax()
|
2968
|
+
df = df.loc[idx]
|
2969
|
+
|
2970
|
+
# 调整列顺序, 定义需要前置的列
|
2971
|
+
cols_to_move = ['日期','平台','店铺名称','品牌名','商品名称', '商品款号','spuid', '一级类目名称', '二级类目名称', '三级类目名称']
|
2972
|
+
# 生成新的列顺序:前置列 + 剩余列(保持原顺序)
|
2973
|
+
new_columns = cols_to_move + [col for col in df.columns if col not in cols_to_move]
|
2974
|
+
# 调整DataFrame列顺序
|
2975
|
+
df = df[new_columns]
|
2976
|
+
df['更新时间'] = df.pop('更新时间')
|
2977
|
+
df = df.astype({'日期': 'datetime64[ns]'}, errors='ignore')
|
2976
2978
|
set_typ = {
|
2977
2979
|
'日期': 'date',
|
2978
2980
|
'店铺名称': 'varchar(100)',
|
2979
|
-
'
|
2981
|
+
'spuid': 'varchar(100)',
|
2980
2982
|
'图片': 'varchar(255)',
|
2981
2983
|
'序号': 'smallint',
|
2982
2984
|
'商品名称': 'varchar(255)',
|
mdbq/spider/aikucun.py
CHANGED
@@ -69,6 +69,7 @@ class AikuCun:
|
|
69
69
|
self.today = datetime.date.today()
|
70
70
|
self.start_date = (self.today - datetime.timedelta(days=7)).strftime('%Y-%m-%d')
|
71
71
|
self.end_date = (self.today - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
|
72
|
+
self.error_count = 0
|
72
73
|
|
73
74
|
def logining(self, shop_name='aikucun', headless=False):
|
74
75
|
option = webdriver.ChromeOptions()
|
@@ -196,6 +197,9 @@ class AikuCun:
|
|
196
197
|
)
|
197
198
|
|
198
199
|
def get_data_from_bbx(self, start_date=None, end_date=None, item_type='spu', page_num=1, page_size=300):
|
200
|
+
"""
|
201
|
+
这里获取的数据等同于"查询"按钮的数据, 没有"营销后供货额/供货价" 这2个字段, 如果通过下载按钮的报表则有两个字段
|
202
|
+
"""
|
199
203
|
if start_date:
|
200
204
|
self.start_date = start_date
|
201
205
|
if end_date:
|
@@ -239,6 +243,9 @@ class AikuCun:
|
|
239
243
|
num = 1
|
240
244
|
results = []
|
241
245
|
for date in date_list:
|
246
|
+
if self.error_count > 5:
|
247
|
+
print('已退出请求 -> self.error_count > 5')
|
248
|
+
break
|
242
249
|
req_date = re.sub('-', '', date)
|
243
250
|
data = {
|
244
251
|
'beginDate': req_date,
|
@@ -266,11 +273,15 @@ class AikuCun:
|
|
266
273
|
print(f'正在获取数据({num}/{len(date_list)}): {item_type}榜单 {date}')
|
267
274
|
# print(res.json())
|
268
275
|
if not res.json()['success']:
|
269
|
-
print('requests 请求不成功, success 返回值应为 True')
|
276
|
+
print('没有获取到数据, requests 请求不成功, success 返回值应为 True')
|
277
|
+
num += 1
|
278
|
+
self.error_count += 1
|
270
279
|
time.sleep(1)
|
271
280
|
continue
|
272
281
|
if not res.json()['data']['rows']:
|
273
|
-
print("
|
282
|
+
print("返回的数据字典异常, ['data']['rows'] 不能为空")
|
283
|
+
num += 1
|
284
|
+
self.error_count += 1
|
274
285
|
time.sleep(1)
|
275
286
|
continue
|
276
287
|
results += [(date, res.json()['data']['rows'])]
|
@@ -390,7 +401,7 @@ class AikuCun:
|
|
390
401
|
'图片': 'varchar(255)',
|
391
402
|
'浏览量': 'INT',
|
392
403
|
'序号': 'INT',
|
393
|
-
'
|
404
|
+
'spuid': 'varchar(50)',
|
394
405
|
'商品名称': 'varchar(50)',
|
395
406
|
'供货额': 'decimal(10,2)',
|
396
407
|
'供货价': 'decimal(10,2)',
|
@@ -469,6 +480,7 @@ def main(start_date, end_date, item_type=['spu']):
|
|
469
480
|
if not data_list:
|
470
481
|
ak.logining()
|
471
482
|
ak.save_token()
|
483
|
+
ak.error_count = 0 # 重置错误计数器
|
472
484
|
else:
|
473
485
|
break
|
474
486
|
|
@@ -482,7 +494,7 @@ def main(start_date, end_date, item_type=['spu']):
|
|
482
494
|
|
483
495
|
if __name__ == '__main__':
|
484
496
|
main(
|
485
|
-
start_date='2025-03-
|
486
|
-
end_date='2025-03-
|
497
|
+
start_date='2025-03-01',
|
498
|
+
end_date='2025-03-12',
|
487
499
|
item_type=['spu', 'sku']
|
488
500
|
)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
|
2
|
-
mdbq/__version__.py,sha256=
|
2
|
+
mdbq/__version__.py,sha256=Getdc-hdWx0sFteBzPqro7bCHfZKcq5ra0Qya_DV54w,17
|
3
3
|
mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
|
4
|
-
mdbq/aggregation/query_data.py,sha256=
|
4
|
+
mdbq/aggregation/query_data.py,sha256=RUyrknC8IEOQnS_yFk_5JNSBdf-n5OcnmCAUgN-bvgw,180742
|
5
5
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
6
6
|
mdbq/bdup/bdup.py,sha256=hJs815hGFwm_X5bP2i9XugG2w2ZY_F0n3-Q0hVpIPPw,4892
|
7
7
|
mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
@@ -28,8 +28,8 @@ mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
|
|
28
28
|
mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
|
29
29
|
mdbq/redis/getredis.py,sha256=Uk8-cOWT0JU1qRyIVqdbYokSLvkDIAfcokmYj1ebw8k,24104
|
30
30
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
31
|
-
mdbq/spider/aikucun.py,sha256=
|
32
|
-
mdbq-3.8.
|
33
|
-
mdbq-3.8.
|
34
|
-
mdbq-3.8.
|
35
|
-
mdbq-3.8.
|
31
|
+
mdbq/spider/aikucun.py,sha256=bUjjPjNoW3EL6H89nnBdFEwnWgGuEB2CENuBxcvx0Kw,20284
|
32
|
+
mdbq-3.8.6.dist-info/METADATA,sha256=fNd7czbtUog5tHTxwy-K2cAtuVWndlREi2HWO4vkp_w,363
|
33
|
+
mdbq-3.8.6.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
34
|
+
mdbq-3.8.6.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
35
|
+
mdbq-3.8.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|