微信美团小程序抓取信息.py 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. # -*- codeing = utf-8 -*-
  2. # @Time : 2021/4/4 15:22
  3. # @Author : Clown
  4. # @File : json转换.py
  5. # @Software : PyCharm
  6. import json
  7. import csv
  8. import time
  9. import os
  10. import re
  11. from dateutil.parser import parse
  12. from datetime import datetime, timedelta
  13. import pandas as pd
  14. def goodsform(input_file,output_file,time_str):
  15. for a, b, files in os.walk(input_file, topdown=False):
  16. for file in files:
  17. path = str(input_file) + '/' + str(file)
  18. try:
  19. with open(path,"r",encoding= "utf-8") as f1:#导入json文件
  20. data = json.load(f1)
  21. # print(json.dumps(data,ensure_ascii = False))
  22. except:
  23. data = ''
  24. try:
  25. title_1 = ["门店名称", "分类", "分类编码", "spu_id", "名称", "月售", "好评度", "折扣", "原价", "当前售价", "餐盒费", "文描"]
  26. with open(output_file + "/%s美团小程序单店菜单.csv" % str(time_str), 'a', newline='',
  27. encoding="utf-8-sig") as t: # encoding= "utf-8"
  28. writer = csv.writer(t) # 这一步是创建一个csv的写入
  29. writer.writerow(title_1) # 写入标签
  30. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  31. for list in data['d']['hr']['data']['data']['food_spu_tags']:
  32. name1 = list['name']#分类名
  33. name2 = list['product_count']#分类下商品数量
  34. for spus in list['spus']:#每有一个list都需要进行拆解,用for循环取值
  35. spuname = spus['name']#商品名称
  36. id = spus['id']
  37. description = spus['description']#文描
  38. like_ratio_desc_1 = spus['like_ratio_desc']
  39. try:
  40. like_ratio_desc = like_ratio_desc_1.split("度")[1]
  41. except:
  42. like_ratio_desc = like_ratio_desc_1
  43. month_saled_content_o = spus['month_saled_content'] # 月售
  44. month_saled_content = month_saled_content_o.split("售")[1]
  45. # print(month_saled_content)
  46. try:
  47. for skus in spus['skus']:
  48. origin_price = skus['origin_price']#原价
  49. price = skus['price']#当前售价
  50. box_price = skus['box_price']
  51. promotion_info = skus['promotion_info'] # 折扣
  52. n = [shop_name,name1,name2,id,spuname,month_saled_content,like_ratio_desc,promotion_info,origin_price,price,box_price,description]
  53. writer.writerow(n) # 写入样本数据
  54. # print(n)
  55. except:
  56. print('出现错误')
  57. except:
  58. try:
  59. try:
  60. title_2 = ['商圈', '品类标签', '门店名称', '评分', '月售', '人均', '起送价', '距离', '原始配送费', '折后配送费', '折扣满减',
  61. '点评标签']
  62. with open(output_file + "/%s美团小程序商圈top门店.csv" % str(time_str), 'a', newline='',
  63. encoding="utf-8-sig") as t_d: # encoding= "utf-8"
  64. writer_d = csv.writer(t_d) # 这一步是创建一个csv的写入
  65. writer_d.writerow(title_2) # 写入标签
  66. # for shop_list in data['d']['hr']['data']['data']['poilist']:
  67. for shop_list in data['data']['poilist']:
  68. name = shop_list['name']#门店名称
  69. month_sales_tip1 = shop_list['month_sales_tip']
  70. month_sales_tip = month_sales_tip1.split('售')[1]#月售
  71. min_price_tip1 = shop_list['min_price_tip']#起送价
  72. min_price_tip = min_price_tip1.split('¥')[1]##起送价min_price_tip=起送 ¥0
  73. distance1 = shop_list['distance']
  74. distance = distance1.split('k')[0]#距离km
  75. wm_poi_score = shop_list['wm_poi_score']#评分
  76. trade_area = shop_list['trade_area']#商圈
  77. third_category = shop_list['third_category']#品类标签
  78. shipping_fee_tip1 = shop_list['shipping_fee_tip'] # 配送费折后
  79. try:
  80. shipping_fee_tip = shipping_fee_tip1.split('¥')[1] # 配送费折后#shipping_fee_tip=配送 ¥5
  81. except:
  82. shipping_fee_tip = shipping_fee_tip1
  83. origin_shipping_fee_tip1 = shop_list['origin_shipping_fee_tip'] # 初始配送费origin_shipping_fee_tip=
  84. try:
  85. origin_shipping_fee_tip = origin_shipping_fee_tip1.split('¥')[1]# 初始配送费 # shipping_fee_tip=配送 ¥5
  86. except:
  87. origin_shipping_fee_tip = origin_shipping_fee_tip1
  88. average_price_tip1 = shop_list['average_price_tip']
  89. average_price_tip = average_price_tip1.split('¥')[1]#人均
  90. recommend_reason1 = []
  91. discounts21 = []
  92. str_1 = ';'
  93. for recommend_level_list in shop_list['recommend_level_list']:
  94. recommend_reason1.append(recommend_level_list['recommend_reason'])
  95. recommend_reason = str_1.join(recommend_reason1)#点评标签
  96. for discounts2 in shop_list['discounts2']:
  97. discounts21.append(discounts2['info'])
  98. discounts = str_1.join(discounts21)#折扣满减
  99. indata = [trade_area,third_category,name,wm_poi_score,month_sales_tip,average_price_tip,min_price_tip,distance,origin_shipping_fee_tip,shipping_fee_tip,discounts,recommend_reason]
  100. #商圈,品类标签,门店名称,评分,月售,人均,起送价,距离,原始配送费,折后配送费,折扣满减,点评标签
  101. # writer.writerows(n) # 写入样本数据
  102. writer_d.writerow(indata)
  103. except:
  104. title_2 = ['目标商圈解析文件','商圈', '品类标签', '门店名称', '评分', '月售', '人均', '起送价', '距离', '原始配送费', '折后配送费', '折扣满减',
  105. '点评标签']
  106. with open (output_file + "/%s美团小程序商圈top门店.csv" % str (time_str), 'a', newline='',
  107. encoding="utf-8-sig") as t_d: # encoding= "utf-8"
  108. writer_d = csv.writer (t_d) # 这一步是创建一个csv的写入
  109. writer_d.writerow (title_2) # 写入标签
  110. tag_trade_area = file
  111. for shop_list in data['data']['search_poi_list']:
  112. name = shop_list['name'] # 门店名称
  113. month_sales_tip1 = shop_list['month_sales_tip']
  114. month_sales_tip = month_sales_tip1.split ('售')[1] # 月售
  115. min_price_tip1 = shop_list['min_price_tip'] # 起送价
  116. min_price_tip = min_price_tip1.split ('¥')[1] ##起送价min_price_tip=起送 ¥0
  117. distance1 = shop_list['distance']
  118. distance = distance1.split ('k')[0] # 距离km
  119. wm_poi_score = shop_list['wm_poi_score'] # 评分
  120. trade_area = shop_list['trade_area'] # 商圈
  121. third_category = shop_list['third_category'] # 品类标签
  122. shipping_fee_tip1 = shop_list['shipping_fee_tip'] # 配送费折后
  123. try:
  124. shipping_fee_tip = shipping_fee_tip1.split ('¥')[1] # 配送费折后#shipping_fee_tip=配送 ¥5
  125. except:
  126. shipping_fee_tip = shipping_fee_tip1
  127. origin_shipping_fee_tip1 = shop_list[
  128. 'origin_shipping_fee_tip'] # 初始配送费origin_shipping_fee_tip=
  129. try:
  130. origin_shipping_fee_tip = origin_shipping_fee_tip1.split ('¥')[
  131. 1] # 初始配送费 # shipping_fee_tip=配送 ¥5
  132. except:
  133. origin_shipping_fee_tip = origin_shipping_fee_tip1
  134. average_price_tip1 = shop_list['average_price_tip']
  135. average_price_tip = average_price_tip1.split ('¥')[1] # 人均
  136. recommend_reason1 = []
  137. discounts21 = []
  138. str_1 = ';'
  139. try:
  140. for recommend_level_list in shop_list['recommend_level_list']:
  141. recommend_reason1.append (recommend_level_list['recommend_reason'])
  142. recommend_reason = str_1.join (recommend_reason1) # 点评标签
  143. except:
  144. recommend_reason = '无'
  145. for discounts2 in shop_list['poi_tags']:
  146. try:
  147. text_value = discounts2['sub_tags']['text']
  148. except:
  149. text_value = ''
  150. discounts21.append (text_value)
  151. discounts = str_1.join (discounts21) # 折扣满减
  152. indata = [tag_trade_area,trade_area, third_category, name, wm_poi_score, month_sales_tip,
  153. average_price_tip, min_price_tip, distance, origin_shipping_fee_tip,
  154. shipping_fee_tip, discounts, recommend_reason]
  155. # 商圈,品类标签,门店名称,评分,月售,人均,起送价,距离,原始配送费,折后配送费,折扣满减,点评标签
  156. # writer.writerows(n) # 写入样本数据
  157. writer_d.writerow (indata)
  158. except:
  159. try:
  160. title_1 = ["门店名称", "分类", "分类编码", "spu_id", "名称", "月售", "好评度", "折扣", "原价", "当前售价", "餐盒费", "文描"]
  161. with open(output_file + "/%s美团小程序单店菜单.csv" % str(time_str), 'a', newline='',
  162. encoding="utf-8-sig") as t: # encoding= "utf-8"
  163. writer = csv.writer(t) # 这一步是创建一个csv的写入
  164. writer.writerow(title_1) # 写入标签
  165. try:
  166. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  167. except:
  168. shop_name = file
  169. for list in data['d']['hr']['data']['data']['food_spu_tags']:
  170. name1 = list['name'] # 分类名
  171. name2 = list['product_count'] # 分类下商品数量
  172. for spus in list['dynamic_spus']: # 每有一个list都需要进行拆解,用for循环取值
  173. spuname = spus['name'] # 商品名称
  174. id = spus['id']
  175. description = spus['description'] # 文描
  176. try:
  177. like_ratio_desc_1 = spus['component_list']
  178. for like_ratio_desc_s in like_ratio_desc_1:
  179. if '好评度' in like_ratio_desc_s['view_data']:
  180. like_ratio_desc_d = json.loads(like_ratio_desc_s['view_data'])['text']
  181. try:
  182. like_ratio_desc = like_ratio_desc_d.split("度")[1]
  183. except:
  184. like_ratio_desc = like_ratio_desc_d
  185. break
  186. else:
  187. like_ratio_desc = ''
  188. except:
  189. like_ratio_desc = ''
  190. # month_saled_content_o = spus['month_saled_content'] # 月售
  191. # month_saled_content = month_saled_content_o.split("售")[1]
  192. month_saled_content = spus['month_saled'] # 月售
  193. # print(month_saled_content)
  194. try:
  195. for skus in spus['skus']:
  196. origin_price = skus['origin_price'] # 原价
  197. price = skus['price'] # 当前售价
  198. box_price = skus['box_price']
  199. promotion_info = skus['promotion_info'] # 折扣
  200. n = [shop_name, name1, name2, id, spuname, month_saled_content, like_ratio_desc,
  201. promotion_info, origin_price, price, box_price, description]
  202. writer.writerow(n) # 写入样本数据
  203. # print(n)
  204. except:
  205. print('出现错误')
  206. except Exception as e:
  207. # print(file, '无效',e)
  208. try:
  209. title_1 = ["门店名称", "分类", "分类编码", "spu_id", "名称", "月售", "好评度", "折扣", "原价", "当前售价", "餐盒费", "文描"]
  210. with open(output_file + "/%s美团小程序单店菜单.csv" % str(time_str), 'a', newline='',
  211. encoding="utf-8-sig") as t: # encoding= "utf-8"
  212. writer = csv.writer(t) # 这一步是创建一个csv的写入
  213. writer.writerow(title_1) # 写入标签
  214. try:
  215. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  216. except:
  217. shop_name = file
  218. for list in data['data']['food_spu_tags']:
  219. name1 = list['name'] # 分类名
  220. name2 = list['product_count'] # 分类下商品数量
  221. for spus in list['dynamic_spus']: # 每有一个list都需要进行拆解,用for循环取值
  222. spuname = spus['name'] # 商品名称
  223. id = spus['id']
  224. description = spus['description'] # 文描
  225. try:
  226. like_ratio_desc_1 = spus['component_list']
  227. for like_ratio_desc_s in like_ratio_desc_1:
  228. if '好评度' in like_ratio_desc_s['view_data']:
  229. like_ratio_desc_d = json.loads(like_ratio_desc_s['view_data'])['text']
  230. try:
  231. like_ratio_desc = like_ratio_desc_d.split("度")[1]
  232. except:
  233. like_ratio_desc = like_ratio_desc_d
  234. break
  235. else:
  236. like_ratio_desc = ''
  237. except:
  238. like_ratio_desc = ''
  239. # month_saled_content_o = spus['month_saled_content'] # 月售
  240. # month_saled_content = month_saled_content_o.split("售")[1]
  241. month_saled_content = spus['month_saled'] # 月售
  242. # print(month_saled_content)
  243. try:
  244. for skus in spus['skus']:
  245. origin_price = skus['origin_price'] # 原价
  246. price = skus['price'] # 当前售价
  247. box_price = skus['box_price']
  248. promotion_info = skus['promotion_info'] # 折扣
  249. n = [shop_name, name1, name2, id, spuname, month_saled_content,
  250. like_ratio_desc,
  251. promotion_info, origin_price, price, box_price, description]
  252. writer.writerow(n) # 写入样本数据
  253. # print(n)
  254. except:
  255. print('出现错误')
  256. except Exception as e:
  257. print(file, '无效', e)
  258. def goodsformV0(input_file,output_file,time_str):
  259. for a, b, files in os.walk(input_file, topdown=False):
  260. for file in files:
  261. path = str(input_file) + '/' + str(file)
  262. try:
  263. with open(path,"r",encoding= "utf-8") as f1:#导入json文件
  264. data = json.load(f1)
  265. # print(json.dumps(data,ensure_ascii = False))
  266. except:
  267. data = ''
  268. try:
  269. try:
  270. title_2 = ['目标商圈解析文件','商圈', '品类标签', '门店名称', '评分', '月售', '人均', '起送价', '距离', '原始配送费', '折后配送费', '折扣满减', '点评标签']
  271. with open(output_file + "/%s美团小程序商圈top门店.csv" % str(time_str), 'a', newline='',
  272. encoding="utf-8-sig") as t_d: # encoding= "utf-8"
  273. writer_d = csv.writer(t_d) # 这一步是创建一个csv的写入
  274. writer_d.writerow(title_2) # 写入标签
  275. tag_trade_area = file
  276. try:
  277. shop_lists = data['d']['hr']['data']['data']['poilist']
  278. except:
  279. shop_lists = data['data']['poilist']
  280. # for shop_list in data['d']['hr']['data']['data']['poilist']:
  281. for shop_list in shop_lists:
  282. name = shop_list['name']#门店名称
  283. month_sales_tip1 = shop_list['month_sales_tip']
  284. month_sales_tip = month_sales_tip1.split('售')[1]#月售
  285. min_price_tip1 = shop_list['min_price_tip']#起送价
  286. min_price_tip = min_price_tip1.split('¥')[1]##起送价min_price_tip=起送 ¥0
  287. distance1 = shop_list['distance']
  288. distance = distance1.split('k')[0]#距离km
  289. wm_poi_score = shop_list['wm_poi_score']#评分
  290. trade_area = shop_list['trade_area']#商圈
  291. third_category = shop_list['third_category']#品类标签
  292. shipping_fee_tip1 = shop_list['shipping_fee_tip'] # 配送费折后
  293. try:
  294. shipping_fee_tip = shipping_fee_tip1.split('¥')[1] # 配送费折后#shipping_fee_tip=配送 ¥5
  295. except:
  296. shipping_fee_tip = shipping_fee_tip1
  297. origin_shipping_fee_tip1 = shop_list['origin_shipping_fee_tip'] # 初始配送费origin_shipping_fee_tip=
  298. try:
  299. origin_shipping_fee_tip = origin_shipping_fee_tip1.split('¥')[1]# 初始配送费 # shipping_fee_tip=配送 ¥5
  300. except:
  301. origin_shipping_fee_tip = origin_shipping_fee_tip1
  302. average_price_tip1 = shop_list['average_price_tip']
  303. average_price_tip = average_price_tip1.split('¥')[1]#人均
  304. recommend_reason1 = []
  305. discounts21 = []
  306. str_1 = ';'
  307. for recommend_level_list in shop_list['recommend_level_list']:
  308. recommend_reason1.append(recommend_level_list['recommend_reason'])
  309. recommend_reason = str_1.join(recommend_reason1)#点评标签
  310. for discounts2 in shop_list['discounts2']:
  311. discounts21.append(discounts2['info'])
  312. discounts = str_1.join(discounts21)#折扣满减
  313. indata = [tag_trade_area,trade_area,third_category,name,wm_poi_score,month_sales_tip,average_price_tip,min_price_tip,distance,origin_shipping_fee_tip,shipping_fee_tip,discounts,recommend_reason]
  314. #商圈,品类标签,门店名称,评分,月售,人均,起送价,距离,原始配送费,折后配送费,折扣满减,点评标签
  315. # writer.writerows(n) # 写入样本数据
  316. writer_d.writerow(indata)
  317. except:
  318. title_2 = ['目标商圈解析文件','商圈', '品类标签', '门店名称', '评分', '月售', '人均', '起送价', '距离', '原始配送费', '折后配送费', '折扣满减',
  319. '点评标签']
  320. with open (output_file + "/%s美团小程序商圈top门店.csv" % str (time_str), 'a', newline='',
  321. encoding="utf-8-sig") as t_d: # encoding= "utf-8"
  322. writer_d = csv.writer (t_d) # 这一步是创建一个csv的写入
  323. writer_d.writerow (title_2) # 写入标签
  324. tag_trade_area = file
  325. for shop_list in data['data']['search_poi_list']:
  326. name = shop_list['name'] # 门店名称
  327. month_sales_tip1 = shop_list['month_sales_tip']
  328. month_sales_tip = month_sales_tip1.split ('售')[1] # 月售
  329. min_price_tip1 = shop_list['min_price_tip'] # 起送价
  330. min_price_tip = min_price_tip1.split ('¥')[1] ##起送价min_price_tip=起送 ¥0
  331. distance1 = shop_list['distance']
  332. distance = distance1.split ('k')[0] # 距离km
  333. wm_poi_score = shop_list['wm_poi_score'] # 评分
  334. trade_area = shop_list['trade_area'] # 商圈
  335. third_category = shop_list['third_category'] # 品类标签
  336. shipping_fee_tip1 = shop_list['shipping_fee_tip'] # 配送费折后
  337. try:
  338. shipping_fee_tip = shipping_fee_tip1.split ('¥')[1] # 配送费折后#shipping_fee_tip=配送 ¥5
  339. except:
  340. shipping_fee_tip = shipping_fee_tip1
  341. origin_shipping_fee_tip1 = shop_list[
  342. 'origin_shipping_fee_tip'] # 初始配送费origin_shipping_fee_tip=
  343. try:
  344. origin_shipping_fee_tip = origin_shipping_fee_tip1.split ('¥')[
  345. 1] # 初始配送费 # shipping_fee_tip=配送 ¥5
  346. except:
  347. origin_shipping_fee_tip = origin_shipping_fee_tip1
  348. average_price_tip1 = shop_list['average_price_tip']
  349. average_price_tip = average_price_tip1.split ('¥')[1] # 人均
  350. recommend_reason1 = []
  351. discounts21 = []
  352. str_1 = ';'
  353. try:
  354. for recommend_level_list in shop_list['recommend_level_list']:
  355. recommend_reason1.append (recommend_level_list['recommend_reason'])
  356. recommend_reason = str_1.join (recommend_reason1) # 点评标签
  357. except:
  358. recommend_reason = '无'
  359. for discounts2 in shop_list['poi_tags']:
  360. try:
  361. text_value = discounts2['sub_tags']['text']
  362. except:
  363. text_value = ''
  364. discounts21.append (text_value)
  365. discounts = str_1.join (discounts21) # 折扣满减
  366. indata = [tag_trade_area,trade_area, third_category, name, wm_poi_score, month_sales_tip,
  367. average_price_tip, min_price_tip, distance, origin_shipping_fee_tip,
  368. shipping_fee_tip, discounts, recommend_reason]
  369. # 商圈,品类标签,门店名称,评分,月售,人均,起送价,距离,原始配送费,折后配送费,折扣满减,点评标签
  370. # writer.writerows(n) # 写入样本数据
  371. writer_d.writerow (indata)
  372. except:
  373. ...
  374. def shopName(input_file,file_in):
  375. if 'response' in file_in:
  376. try:
  377. file_no = int(file_in.split('.')[0].split('_')[1]) + 1
  378. file = file_in.split('_')[0] + '_' + str(file_no) + '.txt'
  379. path = str(input_file) + '/' + str(file)
  380. # 读取文件
  381. try:
  382. with open(path, "r", encoding = "utf-8") as f1: # 导入json文件
  383. data = json.load(f1)
  384. except:
  385. data = ''
  386. try:
  387. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  388. except:
  389. shop_name = data['data']['poi_info']['name']
  390. except:
  391. file_no = int(file_in.split('.')[0].split('_')[1]) + 2
  392. file = file_in.split('_')[0] + '_' + str(file_no) + '.txt'
  393. path = str(input_file) + '/' + str(file)
  394. # 读取文件
  395. try:
  396. with open(path, "r", encoding = "utf-8") as f1: # 导入json文件
  397. data = json.load(f1)
  398. except:
  399. data = ''
  400. try:
  401. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  402. except:
  403. shop_name = data['data']['poi_info']['name']
  404. else:
  405. file_no = int(file_in.split('.')[0].split('_')[1]) - 1
  406. file = file_in.split('_')[0] + '_' +str(file_no) + '.txt'
  407. path = str(input_file) + '/' + str(file)
  408. # 读取文件
  409. try:
  410. with open(path, "r", encoding = "utf-8") as f1: # 导入json文件
  411. data = json.load(f1)
  412. except:
  413. data = ''
  414. try:
  415. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  416. except:
  417. shop_name = data['data']['poi_info']['name']
  418. return shop_name
  419. def productList(input_file,output_file,time_str,mode):
  420. writer = pd.ExcelWriter(output_file + f"/{str(time_str)}美团小程序单店菜单.xlsx")
  421. df_out_all = []
  422. for a, b, files in os.walk(input_file, topdown=False):
  423. for file in files:
  424. df_out = []
  425. path = str(input_file) + '/' + str(file)
  426. # 解析当前文件
  427. try:
  428. # 读取文件
  429. try:
  430. with open(path, "r", encoding = "utf-8") as f1: # 导入json文件
  431. data = json.load(f1)
  432. except:
  433. data = ''
  434. # 读取门店名称
  435. try:
  436. try:
  437. shop_name = data['d']['hr']['data']['data']['poi_info']['name']
  438. except:
  439. shop_name = shopName(input_file, file)
  440. except:
  441. shop_name = file.split('.')[0]
  442. # 读取门店商品列表
  443. try:
  444. goodsList = data['data']['food_spu_tags']
  445. except:
  446. goodsList = data['d']['hr']['data']['data']['food_spu_tags']
  447. for list in goodsList:
  448. name1 = list['name'] # 分类名
  449. name2 = list['product_count'] # 分类下商品数量
  450. for spus in list['dynamic_spus']: # 每有一个list都需要进行拆解,用for循环取值
  451. spuname = spus['name'] # 商品名称
  452. id = spus['id']
  453. description = spus['description'] # 文描
  454. try:
  455. like_ratio_desc_1 = spus['component_list']
  456. for like_ratio_desc_s in like_ratio_desc_1:
  457. if '好评度' in like_ratio_desc_s['view_data']:
  458. like_ratio_desc_d = json.loads(like_ratio_desc_s['view_data'])['text']
  459. try:
  460. like_ratio_desc = like_ratio_desc_d.split("度")[1]
  461. except:
  462. like_ratio_desc = like_ratio_desc_d
  463. break
  464. else:
  465. like_ratio_desc = ''
  466. except:
  467. like_ratio_desc = ''
  468. # month_saled_content_o = spus['month_saled_content'] # 月售
  469. # month_saled_content = month_saled_content_o.split("售")[1]
  470. month_saled_content = spus['month_saled'] # 月售
  471. # print(month_saled_content)
  472. try:
  473. for skus in spus['skus']:
  474. origin_price = skus['origin_price'] # 原价
  475. price = skus['price'] # 当前售价
  476. box_price = skus['box_price']
  477. promotion_info = skus['promotion_info'] # 折扣
  478. n = [shop_name, name1, name2, id, spuname, month_saled_content,
  479. like_ratio_desc,
  480. promotion_info, origin_price, price, box_price, description]
  481. df_out.append(n)
  482. df_out_all.append(n)
  483. except:
  484. print('出现错误')
  485. if mode == 'parts':
  486. df_out_e = pd.DataFrame(df_out,
  487. columns = ["门店名称", "分类", "分类编码", "spu_id", "名称", "月售", "好评度", "折扣", "原价",
  488. "当前售价", "餐盒费", "文描"])
  489. df_out_e.to_excel(writer, sheet_name = shop_name)
  490. except:
  491. shop_name = file.split('.')[0]
  492. print(f'{shop_name}文件有误')
  493. if mode == 'all':
  494. df_out_e = pd.DataFrame(df_out_all,columns = ["门店名称", "分类", "分类编码", "spu_id", "名称", "月售", "好评度", "折扣", "原价", "当前售价", "餐盒费", "文描"])
  495. df_out_e.to_excel(writer)
  496. writer.save()
  497. def userEvaluate(input_file,output_file,time_str):
  498. df_out = []
  499. for a, b, files in os.walk(input_file, topdown=False):
  500. for file in files:
  501. path = str(input_file) + '/' + str(file)
  502. with open(path,"r",encoding= "utf-8") as f1:#导入json文件
  503. data = json.load(f1)
  504. try:
  505. try:
  506. shop_data = data['d']['hr']['data']['data']
  507. except:
  508. shop_data = data['data']
  509. shop_id = 'ID'+str(shop_data['comments_dp']['wm_poi_id']) #店铺id
  510. comment_score = shop_data['comment_score'] #店铺分
  511. comments = shop_data['comments']
  512. for comment_data in comments:
  513. comment = str(comment_data['comment']).replace('\n',',') #评论内容
  514. user_id = comment_data['user_id'] #用户id
  515. user_name = comment_data['user_name'] #用户姓名
  516. wm_comment_id = comment_data['wm_comment_id'] #评论id
  517. order_comment_score = comment_data['order_comment_score'] # 订单评分
  518. order_time = datetime.fromtimestamp(comment_data['order_time']).strftime("%Y-%m-%d %H:%M:%S") # 下单时间
  519. comment_time = datetime.fromtimestamp(comment_data['comment_time']).strftime("%Y-%m-%d %H:%M:%S") # 评论时间
  520. spu_id_list = comment_data['spu_id_list'] # 商品id列表
  521. comment_scheme_list = comment_data['comment_scheme'] # 评论组合列表
  522. praise_food_list = comment_data['praise_food_list'] #喜好商品列表
  523. if len(spu_id_list) > 0:
  524. for spu_id in spu_id_list:
  525. sku_id = '无'
  526. keyword = '无'
  527. praise_memo = ''
  528. if len(comment_scheme_list) > 0:
  529. for comment_scheme in comment_scheme_list:
  530. if str(spu_id) == str(comment_scheme['spu_id']):
  531. keyword = comment_scheme['keyword'] #关键词
  532. sku_id = comment_scheme['sku_id'] #sku_id
  533. if len(praise_food_list) > 0:
  534. for praise_food in praise_food_list:
  535. if str(spu_id) in praise_food['schema_uri']:
  536. praise_memo = '赞'
  537. row = [shop_id, comment_score, wm_comment_id, order_time, comment_time, user_id, user_name,
  538. order_comment_score, spu_id, sku_id, keyword, praise_memo, comment]
  539. df_out.append(row)
  540. else:
  541. row = [shop_id, comment_score, wm_comment_id, order_time, comment_time, user_id, user_name,
  542. order_comment_score, '无', '无', '无', '无', comment]
  543. df_out.append(row)
  544. except Exception as e:
  545. print(e)
  546. df_out = pd.DataFrame(df_out,columns = ['店铺id','店铺分','评论id','下单时间','评论时间','用户id','用户姓名','订单评分','spu_id','sku_id','商品名称','点赞','评论内容'])
  547. df_out.to_excel(output_file+ "/%s美团小程序单店评论.xlsx" % str(time_str))
  548. if __name__ == '__main__':
  549. input_file = r"C:\Users\ClownHe\Desktop\导入\文件输入"
  550. output_file = r"C:\Users\ClownHe\Desktop\导入\输出"
  551. time_str = time.strftime("%Y%m%d%H%M%S", time.localtime())
  552. # goodsformV0(input_file,output_file,time_str)
  553. mode = 'all'
  554. productList(input_file, output_file, time_str, mode)
  555. # input_file = r"C:\Users\ClownHe\Desktop\导入\评论列表"
  556. # userEvaluate(input_file, output_file, time_str)