import random import time from datetime import datetime import requests import json from common import Feishu from common.sql_help import sqlCollect class QplKs: @classmethod def ks_data_list(cls): content_type = [{'美食': '673'}, {'短剧': '674'}, {'时尚': '675'}, {'母婴亲子': '676'}, {'生活': '677'}, {'汽车': '678'}, {'旅游': '679'}, {'体育运动': '680'}, {'艺术文化': '682'}, {'房产家居': '683'}, {'健康医疗': '684'}, {'教育培训': '685'}, {'高新数码': '686'}, {'音乐': '687'}, {'舞蹈': '688'}, {'读书': '689'}, {'摄影': '704'}, {'财经投资': '690'}, {'萌宠': '691'}, {'时政资讯': '692'}, {'科学与法律': '693'}, {'三农': '694'}, {'搞笑': '695'}, {'情感': '696'}, {'人文': '697'}, {'星座命理': '699'}, {'奇人异象': '700'}, {'军事': '701'}, {'影视娱乐': '702'}, {'民生资讯': '703'}, {'健身达人': '706'}, {'纪实类': '705'}] # fans_count = [{0: 100000}, {100000: 1000000}, {1000000: 3000000}, {3000000: 5000000}, {5000000: 10000000}, # {10000000: 0}] fans_count = [{10000000: 0}, {5000000: 10000000}] url = "https://k.kuaishou.com/rest/web/star/list" headers = { 'Accept': 'application/json', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Content-Type': 'application/json', 'Cookie': 'did=web_9c6a04a4004fdb7c95a658a56ed275b6; didv=1711519980000; apdid=328ac94f-4040-41fe-a038-b60140291aca99fb22e9862c74736f53d57b666ee53b:1719580529:1; language=zh-CN; ud=2205012540; app_id=ks686235996059836592; expire_time=1800; userId=2574854626; access_token=ChFvYXV0aC5hY2Nlc3NUb2tlbhIwIRvxysHMF86NQiMYMtw1_s0zM4gAEA9_4VrJixHfjYqD8RBNius0YXow_kWI0B8sGhINVY3cQVhC4YDnv5YNyfZ0IKwiIObPEx_s6MCNTBHJclEO0mnOPHspy1vnwt-9536AWyqYKAUwAQ; nc_user_id=CiVhZC5ub3RpZnkuY2VudGVyLm9hdXRoLnVzZXIuaWQuc2VjcmV0EiAtVd5hI6zlT9/UG3HxzRPGDpAxZul8rkwLeQzpGx4y5xoS0fOAqkTADrggSZ6ZpciI2NO9IiBQFbr8Uk6ApRwM5LcFRtS+AAj/QbpiELCRBW7L200+nCgFMAE=; kuaishou.ad.social_st=ChVrdWFpc2hvdS5hZC5zb2NpYWwuc3QSoAFByWIrb3A2KGuX_eJCqlJa6wQTlc2l7mp_MQN_5RLJ4INIE2O3-v18nVEBafp8VK9sY5-ExW_XMpfak7gT8EoI0ft5snPqXur9Ki4gVWIbK-Z-VkyQFkAaD6qB-VtBsqiUoHEmAI9s1H-1kLMKYTCwBUbPH8TsBbnPQw0Lg8NvSQ2Gl4_DP0uA4ouuPFjKJtcoEs9SEz9VbPFfC7X0iDQFGhIk8-y_Rw9CUpd3ZdyZev2LvtUiIKLFKmL283X9GwjqcIMqjlF3erFhqI1QIA9aK-z1gQh3KAUwAQ; kuaishou.ad.social_ph=8764c8e6b60f8cff08b469a56da3fdbe2482; did=web_9c6a04a4004fdb7c95a658a56ed275b6; didv=1711522726000', 'Origin': 'https://k.kuaishou.com', 'Pragma': 'no-cache', 'Referer': 'https://k.kuaishou.com/', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', } # for count in fans_count: # (fans_min_num, fans_max_num), = count.items() for content in content_type: (content_name, content_id), = content.items() current_page = 1 while True: payload_data = { "currentPage": current_page, "pageSize": 20, "starOrderTag": 3, "taskType": 1, "marketingGoal": 1, "viewerAgeList": [ # 观众画像 50+ { "from": "0.50", "to": "1.00", "queryName": "50+" } ], "userName": "", "vitalityTags": [ # 活跃度 近期短视频活跃 "668" ], "contentTagIdList": [ # 内容类型 { "id": str(content_id), "selectFirstLevelId": True } ], "starTagIds": [ # 高调性 13 ] # "fansMinNum": 1000000, # 粉丝数量 # "fansMaxNum": 3000000, # 粉丝数量 } # if fans_min_num > 0: # payload_data["fansMinNum"] = fans_min_num # if fans_max_num > 0: # payload_data["fansMaxNum"] = fans_max_num payload = json.dumps(payload_data) time.sleep(random.randint(10, 20)) response = requests.request("POST", url, headers=headers, data=payload) response = response.json() print(f"开始扫描{content}") result = response["result"] if result == 1: total = response["total"] # 总条数 if total == 0: print(f"没有扫描到数据{content}") break star_list = response["starList"] if len(star_list) == 0 or star_list == []: break for star in star_list: print(f"扫描到一条数据{content}") user_id = star["userId"] star_id = star["starId"] name = star["name"] # 用户名 kwai_id = star["kwaiId"] # 用户名id gender = star["gender"] # 性别 fans_number = star["fansNumber"] # 粉丝数 profile_id = star["profileId"] # 主页id star_tag_str = star["starTagStr"] # 内容类型1 industry_tag_str = star["industryTagStr"] # 内容类型2 photo_expect_play = star["photoExpectPlay"] # 预期播放量 photo_expect_cpm = star["photoExpectCpm"] # 预期CPM photo_interaction_rate = star["photoInteractionRate"] # 互动率 photo_complete_play_rate = star["photoCompletePlayRate"] # 完播率 fans_increase_num = star["fansIncreaseNum"] # 粉丝增长量 fans_increase_rate = star["fansIncreaseRate"] # 粉丝增长率 # res = sqlCollect.insert_ks_qpl_data(user_id, star_id, name, kwai_id, gender, fans_number, profile_id, star_tag_str, industry_tag_str, photo_expect_play, photo_expect_cpm, photo_interaction_rate, photo_complete_play_rate, fans_increase_num, fans_increase_rate) # if res == 1: current_time = datetime.now() formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S") # if fans_min_num == 0: # fans = f"{fans_max_num}及以下" # if fans_max_num == 0: # fans = f"{fans_min_num}及以上" # else: # fans = f"{fans_min_num}~{fans_max_num}" values = [ [ name, gender, fans_number, profile_id, "https://www.kuaishou.com/profile/"+profile_id, star_tag_str, industry_tag_str, photo_expect_play, photo_expect_cpm, photo_interaction_rate, photo_complete_play_rate, fans_increase_num, fans_increase_rate, # fans, formatted_time ] ] Feishu.insert_columns("GjGZsmW2ahaCe4tmzDTc58tVnbe", "emf56g", "ROWS", 1, 2) time.sleep(0.5) Feishu.update_values("GjGZsmW2ahaCe4tmzDTc58tVnbe", "emf56g", "A2:Z2", values) print(f"入库到一条数据{content}") current_page += 1 if total < 20: break else: page = int(total)/20 if current_page > int(page)+1: break if __name__ == '__main__': QplKs.ks_data_list()