饿了么(分时竞价数据)20240116.py 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. # -*- codeing = utf-8 -*-
  2. # @Time : 2021/4/14 13:30
  3. # @Author : Clown
  4. # @File : 美团曝光(新).py
  5. # @Software : PyCharm
  6. from time import sleep
  7. import requests
  8. import csv
  9. import random
  10. import xlrd
  11. import os
  12. import sys
  13. from datetime import datetime,timedelta
  14. import json
  15. import pymysql
  16. def linkTomySql(host, passwd, db_name, port):
  17. '''连接至数据库返回【db】,v2新增local_infile=1 打开文件导入权限'''
  18. try:
  19. # 本地连接为:localhost 服务器连接为:124.222.188.59
  20. db = pymysql.connect (
  21. host=host, user="root",
  22. passwd=passwd,
  23. db=db_name,
  24. charset='utf8mb4',
  25. local_infile=1,
  26. port=port)
  27. # print ('\nconnect to mysql server 成功')
  28. # print ('---------------------------------------')
  29. except:
  30. print ("\ncould not connect to mysql server")
  31. db = "连接失败"
  32. return db
  33. def read_key_value_pair(db, brand_name, wm_plate, owner):
  34. '''按条件读取,数据库中all_key_table表里的key_value_pair字段中的值,以键值对的形式输出
  35. db:数据库,
  36. brand_name:品牌名,
  37. wm_plate:外卖平台MEITUAN或ELEME,
  38. owner:账号权限all或one
  39. '''
  40. cursor = db.cursor ()
  41. sql = f'SELECT key_value_pair FROM all_key_table WHERE brand_name = "{brand_name}" AND wm_plate = "{wm_plate}" AND owner = "{owner}";'
  42. cursor.execute (sql)
  43. pair = json.loads (cursor.fetchall ()[0][0])
  44. return pair
  45. def get_shops_info_to_list(db, brand_name, wm_plate, key_name):
  46. '''获取门店信息表【shops_info_to_list】中的信息,
  47. 并返回表单shops_info_df【shop_id,shop_name,update_datetime,info_for_script】
  48. db:数据库信息
  49. brand_name:品牌
  50. wm_plate:外卖平台
  51. key_name:关键信息字段名,如无填‘’,如有填对应键值对的key
  52. '''
  53. cursor = db.cursor ()
  54. if key_name == '':
  55. sql = f'SELECT shop_id,shop_name,update_datetime FROM shops_info_for_script WHERE brand_name = "{brand_name}" AND wm_plate = "{wm_plate}";'
  56. cursor.execute (sql)
  57. shops_info = cursor.fetchall ()
  58. shops_info_df = []
  59. for shop_info in shops_info:
  60. shop_info_dict = {'shop_id': shop_info[0],
  61. 'shop_name': shop_info[1]}
  62. shops_info_df.append (shop_info_dict)
  63. return shops_info_df
  64. else:
  65. sql = f'SELECT shop_id,shop_name,update_datetime,info_for_script -> "$.{key_name}" FROM shops_info_for_script WHERE brand_name = "{brand_name}" AND wm_plate = "{wm_plate}";'
  66. cursor.execute (sql)
  67. shops_info = cursor.fetchall ()
  68. shops_info_df = []
  69. for shop_info in shops_info:
  70. shop_info_dict = {'shop_id': shop_info[0],
  71. 'shop_name': shop_info[1],
  72. 'update_datetime': shop_info[2],
  73. f'{key_name}': shop_info[3]}
  74. shops_info_df.append (shop_info_dict)
  75. return shops_info_df
  76. if __name__ == '__main__':
  77. host = '124.222.188.59'
  78. passwd = '111...Clown'
  79. db_name = 'zuzu_data'
  80. port = 63306
  81. db = linkTomySql(host, passwd, db_name, port)
  82. brand_name = '浆小白'
  83. owner = 'all'
  84. keys_dict = {'elm':'',
  85. 'elm_shops':'',
  86. 'mt':'',
  87. 'mt_shops':''}
  88. keys_dict['elm'] = read_key_value_pair(db, brand_name, 'ELEME', owner)
  89. keys_dict['elm_shops'] = get_shops_info_to_list(db,brand_name,'ELEME','')
  90. keys_dict['mt'] = read_key_value_pair (db, brand_name, 'MEITUAN', owner)
  91. keys_dict['mt_shops'] = get_shops_info_to_list (db, brand_name, 'MEITUAN', '')
  92. try:
  93. ksid = keys_dict['elm'] ['data']['session']['ksid']
  94. elm_shops = keys_dict['elm_shops']
  95. script_name = os.path.basename(sys.argv[0])
  96. beginTime = (datetime.today() + timedelta(days=-1)).strftime('%Y-%m-%d') #2022-06-23
  97. endTime = (datetime.today() + timedelta(days=-1)).strftime('%Y-%m-%d') #2022-06-23
  98. beginTime_int =int((datetime.today() + timedelta(days=-1)).strftime('%Y%m%d')) #20220623
  99. endTime_int = int((datetime.today() + timedelta(days=-1)).strftime('%Y%m%d')) #20220623
  100. title = ["门店id", "时段", "点击次数", "时段竞价花费", "单次点击花费", "曝光次数", "点击率%", "店名", "数据日期"]
  101. with open ("F:/cppc/cppc_数据表/3每日爬虫数据/饿了么分时竞价数据/%s饿了么分时竞价数据.csv" % str (beginTime_int), 'a', newline='',
  102. encoding="utf-8-sig") as t: # encoding= "utf-8"
  103. writer = csv.writer (t) # 这一步是创建一个csv的写入
  104. writer.writerow (title) # 写入标签
  105. for shop in elm_shops:
  106. shop_id = shop['shop_id']
  107. shop_name = shop['shop_name']
  108. # print(shop_name)
  109. sleep(random.uniform(0.5, 1.5))
  110. try:
  111. url1 = 'https://httpizza.ele.me/vas.gateway/one_route/call_one_bp?method=findUserTotalReport&service=oneReportService'
  112. params ={"service":"oneReportService",
  113. "method":"findUserTotalReport",
  114. "params":[{"loginId":shop_id,"bizCode":"eleCpc"},{"reportEndDate":endTime,"reportStartDate":beginTime,"showDetail":True}],
  115. "ksid":ksid}
  116. headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36','content-type':'application/json'}
  117. resp =requests.post(url1,json=params,headers=headers)#post类型的网页数据
  118. data = resp.json()
  119. data_json = data['result']#分时数据
  120. for list in data_json['list']:
  121. timeSign = list['time']#时段
  122. totalCount = list['click']#点击次数
  123. totalCost = list['cost']#时段竞价花费
  124. averageCost = list['ppc']#单次点击花费
  125. exposureAmount = list['impression']#曝光次数
  126. clickRate = list['ctr']#点击率
  127. list_data= [shop_id,timeSign,totalCount,totalCost,averageCost,exposureAmount,clickRate,shop_name,beginTime]
  128. writer.writerow(list_data) # 写入样本数据
  129. print(script_name,shop_id, shop_name,'inputing')
  130. except:
  131. list_data = [shop_id, "error", "error", "error", "error", "error", "error", shop_name,beginTime]
  132. writer.writerow(list_data) # 写入样本数据
  133. print(script_name,shop_id,shop_name,'error')
  134. except Exception as e:
  135. print(e)
  136. '''
  137. #需要修改时间注意!注意!
  138. workbook = xlrd.open_workbook(r'F:/cppc/cppc_数据表/门店信息表.xlsx')
  139. sheet_list = ["浆小白"]
  140. for sheet in sheet_list:
  141. table = workbook.sheet_by_name(sheet)#袁阿姨 浆小白
  142. id_data = table.col_values(1,10)#第2列第11行
  143. row = 9#行号
  144. a = str( table.cell_value(1,1))#开始时间
  145. b = str( table.cell_value(2,1))#结束时间
  146. ksid = table.cell_value(0,1)#'MDBMNDMTA1Mjc0Mzc5NjQzNTAxTmRSZWZYaTJQ'
  147. pin = table.cell_value(3,1)#第4行 第2列
  148. day = int(table.cell_value(4,1))#第5行 第2列
  149. for i in id_data:
  150. row += 1
  151. cell = table.cell_value(row, 2) # 第row行第3列
  152. sleep(random.uniform(0.5, 1.5))
  153. try:
  154. n = int(i)
  155. url1 = 'https://app-api.shop.ele.me/alchemy/invoke/?method=wager.getUVSummary'
  156. params ={'id':'3CF8E83EF1FE4D299B2E44E83328B50D|1619496050955','metas':{'appName':'bs-river-bid','appVersion':'4.4.0','ksid':ksid,'biz_type':'seiya'},'service':'wager','method':'getUVSummary','params':{'restaurantId':n,'type':'','beginTime':a,'endTime':b},'ncp':'2.0.0'}
  157. headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36','content-type':'application/json'}
  158. resp =requests.post(url1,json=params,headers=headers)#post类型的网页数据
  159. data = resp.json()
  160. data_json = data['result']#分时数据
  161. for list in data_json['details']:
  162. timeSign = list['timeSign']#时段
  163. totalCount = list['totalCount']#点击次数
  164. totalCost = list['totalCost']#时段竞价花费
  165. averageCost = list['averageCost']#单次点击花费
  166. exposureAmount = list['exposureAmount']#曝光次数
  167. clickRate = list['clickRate']#点击率
  168. list_data= [[n,timeSign,totalCount,totalCost,averageCost,exposureAmount,clickRate,cell,a]]
  169. title = ["门店id","时段","点击次数","时段竞价花费","单次点击花费","曝光次数","点击率%","店名","数据日期"]
  170. with open("F:/cppc/cppc_数据表/3每日爬虫数据/饿了么分时竞价数据/%s饿了么分时竞价数据.csv"%str(day), 'a', newline='', encoding="utf-8-sig") as t: # encoding= "utf-8"
  171. writer = csv.writer(t) # 这一步是创建一个csv的写入
  172. writer.writerow(title) # 写入标签
  173. writer.writerows(list_data) # 写入样本数据
  174. print(sheet,n, "第%s行"%str(row+1),'inputing')
  175. except:
  176. list_data = [[n, "error", "error", "error", "error", "error", "error", cell,a]]
  177. title = ["门店id", "时段", "点击次数", "时段竞价花费", "单次点击花费", "曝光次数", "点击率%", "店名","数据日期"]
  178. with open("F:/cppc/cppc_数据表/3每日爬虫数据/饿了么分时竞价数据/%s饿了么分时竞价数据.csv" %str(day), 'a', newline='',
  179. encoding="utf-8-sig") as t: # encoding= "utf-8"
  180. writer = csv.writer(t) # 这一步是创建一个csv的写入
  181. writer.writerow(title) # 写入标签
  182. writer.writerows(list_data) # 写入样本数据
  183. print(sheet,n,"第%s行"%str(row+1),'error')
  184. '''