Bladeren bron

全品类 磁力聚星 数据抓取脚本

zhangyong 9 maanden geleden
bovenliggende
commit
16c6d14889
4 gewijzigde bestanden met toevoegingen van 306 en 180 verwijderingen
  1. 25 2
      common/sql_help.py
  2. 275 0
      data_channel/qpl_cljx.py
  3. 0 178
      data_channel/qpl_ks.py
  4. 6 0
      qpl_cljx_job.py

+ 25 - 2
common/sql_help.py

@@ -114,10 +114,33 @@ class sqlCollect():
         return res
         return res
 
 
     @classmethod
     @classmethod
-    def insert_ks_qpl_data(cls, user_id: str, star_id: str, name, kwai_id: str, gender: str, fans_number: str,
+    def insert_ks_star_data(cls, user_id: str, star_id: str, name, kwai_id: str, gender: str, fans_number: str,
                        profile_id: str, star_tag_str: str, industry_tag_str: str, photo_expect_play: str, photo_expect_cpm: str, photo_interaction_rate: str,
                        profile_id: str, star_tag_str: str, industry_tag_str: str, photo_expect_play: str, photo_expect_cpm: str, photo_interaction_rate: str,
                        photo_complete_play_rate: str, fans_increase_num: str, fans_increase_rate: str,):
                        photo_complete_play_rate: str, fans_increase_num: str, fans_increase_rate: str,):
-        insert_sql = f"""INSERT INTO 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) values ("{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}")"""
+        insert_sql = f"""INSERT INTO ks_star_info (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) values ("{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}")"""
+        res = MysqlHelper.update_values(
+            sql=insert_sql
+        )
+        return res
+
+    @classmethod
+    def insert_ks_star_works_info(cls, star_id: str, profile_id: str, pplay_median_data_90: str, pplay_median_data_30: str, pphoto_cnt_data_90: str, pphoto_cnt_data_30: str, pavg_video_duration_data_90: str, pavg_video_duration_data_30: str, star_work_report_90: str, star_work_report_30: str, pavg_share_cnt_90: str, pavg_share_cnt_30: str):
+        insert_sql = f"""INSERT INTO ks_star_works_info 
+                        (star_id, profile_id, pplay_median_data_90, pplay_median_data_30, pphoto_cnt_data_90, pphoto_cnt_data_30, pavg_video_duration_data_90, pavg_video_duration_data_30, star_work_report_90, star_work_report_30, pavg_share_cnt_90, pavg_share_cnt_30)
+                        values 
+                        ("{star_id}", "{profile_id}", "{pplay_median_data_90}", "{pplay_median_data_30}", "{pphoto_cnt_data_90}", "{pphoto_cnt_data_30}", "{pavg_video_duration_data_90}", "{pavg_video_duration_data_30}", "{star_work_report_90}", "{star_work_report_30}", "{pavg_share_cnt_90}", "{pavg_share_cnt_30}")"""
+        res = MysqlHelper.update_values(
+            sql=insert_sql
+        )
+        return res
+
+    @classmethod
+    def insert_ks_list_portrait_info(cls, star_id: str, profile_id: str, type: str,
+                                  name: str, proportion: str):
+        insert_sql = f"""INSERT INTO ks_list_portrait_info 
+                            (star_id, profile_id, type, name, proportion)
+                            values 
+                            ("{star_id}", "{profile_id}", "{type}", "{name}", "{proportion}")"""
         res = MysqlHelper.update_values(
         res = MysqlHelper.update_values(
             sql=insert_sql
             sql=insert_sql
         )
         )

+ 275 - 0
data_channel/qpl_cljx.py

@@ -0,0 +1,275 @@
+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_star_info(cls):
+        content_type = [{'美食': '673'}, {'旅游': '679'}, {'音乐': '687'}, {'时政资讯': '692'},  {'健康医疗': '684'},
+                        {'军事': '701'}, {'教育培训': '685'}, {'生活': '677'}, {'舞蹈': '688'},
+                        {'母婴亲子': '676'}, {'萌宠': '691'}, {'情感': '696'}, {'搞笑': '695'}, {'人文': '697'},
+                        {'三农': '694'}, {'科学与法律': '693'}, {'读书': '689'}, {'奇人异象': '700'}, {'民生资讯': '703'},
+                        {'纪实类': '705'}, {'财经投资': '690'}, {'摄影': '704'}, {'艺术文化': '682'}, {'房产家居': '683'},
+                        {'短剧': '674'}, {'时尚': '675'}, {'影视娱乐': '702'}, {'体育运动': '680'}, {'健身达人': '706'},
+                        {'星座命理': '699'},  {'汽车': '678'}, {'高新数码': '686'}]
+        fans_count = [{10000000: 0}, {5000000: 10000000}, {3000000: 5000000}, {1000000: 3000000}, {100000: 1000000},  {0: 100000}]
+
+
+        # 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"]  # 粉丝增长率
+                            sqlCollect.insert_ks_star_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)
+                            print(f"{star_id}-{profile_id}获取列表入库成功")
+                            cls.ks_star_works_info(star_id, profile_id)
+                            time.sleep(5)
+                            cls.ks_list_portrait_info(star_id, profile_id)
+                            time.sleep(5)
+                            # # 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", "COyUUm", "ROWS", 1, 2)
+                            # time.sleep(0.5)
+                            # Feishu.update_values("GjGZsmW2ahaCe4tmzDTc58tVnbe", "COyUUm", "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
+
+    """
+    传播表现
+    """
+    @classmethod
+    def ks_star_works_info(cls, star_id: str, profile_id: str):
+        url = "https://k.kuaishou.com/rest/web/star/starWorksInfo"
+
+        payload = json.dumps({
+            "starId": star_id,
+            "starType": 1
+        })
+        headers = {
+            'Accept': 'application/json',
+            'Accept-Language': 'zh-CN,zh;q=0.9',
+            'Connection': 'keep-alive',
+            'Content-Type': 'application/json',
+            'Cookie': 'did=web_9c6a04a4004fdb7c95a658a56ed275b6; apdid=328ac94f-4040-41fe-a038-b60140291aca99fb22e9862c74736f53d57b666ee53b:1719580529:1; language=zh-CN; ud=2205012540; app_id=ks686235996059836592; expire_time=1800; userId=2574854626; didv=1723085291918; ktrace-context=1|MS44NDczNjc0NTc4Njk4ODg0LjkyNDY3NjQzLjE3MjM2MTQ2Mjg2NjEuMzc1MTU4NQ==|MS44NDczNjc0NTc4Njk4ODg0Ljg1OTQzNzM2LjE3MjM2MTQ2Mjg2NjEuMzc1MTU4Ng==|0|kfx-static-next|webservice|true|src-Js; access_token=ChFvYXV0aC5hY2Nlc3NUb2tlbhIwEfqwf_iXlB7qZC-yBIZ7wzfbtvVxWEtcqvOjV3Ahucb4bcg4eEU4ZXJdiGjXL0_DGhImjeJINItPIItBy5OsJyVmCSAiIJC7zfaxc6aWMUNcZnaovyHman1q9FuX6SVwvv78r766KAUwAQ; nc_user_id=CiVhZC5ub3RpZnkuY2VudGVyLm9hdXRoLnVzZXIuaWQuc2VjcmV0EiA9Xlc6pQrv/CfDOcZkppkPR/m+EmFPauz504UqHlT6NhoSrafgX8ChvRXqqk8sQBmlX0bHIiDVB56hHXHIm6E7T5fG/voyXk4XLCiSfZmJ+cBMIezaNigFMAE=; kuaishou.ad.social_st=ChVrdWFpc2hvdS5hZC5zb2NpYWwuc3QSoAFoZ_IW4vs9mw9faWsm7l1U1unH1_dkj033-ggljw2O8ynkHvCFFt0YYAU2ChQgd06Jj53lsHtNgoGFBhkI7zk7h2UJZYTwI5jM0lSBGYTBBz9xGMIfOLqb4WSb5B6YUPfXVNn4wJnUTHrjTkfGjVwbIpVUgu4ybTeDVOstpJDjZF094_Uy-wpsCFXn3cIW60eFgxTmm07hm2BC1yk26r8BGhJtJytzzT9F3o-MaB2XfjahhY8iIPEDbdiIyKie8z8u56eji4V8xu3h7G7Fg-rsS4gxHlrRKAUwAQ; kuaishou.ad.social_ph=dca9139add9f00215f47609bc3d88e43272c; did=web_9c6a04a4004fdb7c95a658a56ed275b6; didv=1711522726000',
+            'Origin': 'https://k.kuaishou.com',
+            'Referer': 'https://k.kuaishou.com/'
+        }
+        response = requests.request("POST", url, headers=headers, data=payload)
+        response = response.json()
+        result = response['result']
+        if result == 1:
+            star_work_report = response['starWorksInfo']['starWorkReport']
+            pplay_median_data = star_work_report['pplayMedianData']  # 播放量中位数
+            pplay_median_data_90 = pplay_median_data['90']  # 获取键 '90' 对应的值
+            pplay_median_data_30 = pplay_median_data['30']  # 获取键 '30' 对应的值
+            pphoto_cnt_data = star_work_report['pphotoCntData']  # 视频数量
+            pphoto_cnt_data_90 = pphoto_cnt_data['90']  # 获取键 '90' 对应的值
+            pphoto_cnt_data_30 = pphoto_cnt_data['30']  # 获取键 '30' 对应的值
+            pavg_video_duration_data = star_work_report['pavgVideoDurationData']  # 平均时长
+
+            pavg_video_duration_data_90 = f"{float(pavg_video_duration_data['90']):.3f}%"  # 获取键 '90' 对应的值
+            pavg_video_duration_data_30 = f"{float(pavg_video_duration_data['30']):.3f}%"  # 获取键 '30' 对应的值
+            pavg_like_cnt_data = star_work_report['pavgLikeCntData']  # 平均点赞
+            star_work_report_90 = pavg_like_cnt_data['90']  # 获取键 '90' 对应的值
+            star_work_report_30 = pavg_like_cnt_data['30']  # 获取键 '30' 对应的值
+            pavg_share_cnt_data = star_work_report['pavgShareCntData']  # 平均分享
+            pavg_share_cnt_90 = pavg_share_cnt_data['90']  # 获取键 '90' 对应的值
+            pavg_share_cnt_30 = pavg_share_cnt_data['30']  # 获取键 '30' 对应的值
+            sqlCollect.insert_ks_star_works_info(star_id, profile_id, pplay_median_data_90, pplay_median_data_30, pphoto_cnt_data_90, pphoto_cnt_data_30, pavg_video_duration_data_90, pavg_video_duration_data_30, star_work_report_90, star_work_report_30, pavg_share_cnt_90, pavg_share_cnt_30)
+            print(f"{star_id}-{profile_id}获取传播表现入库成功")
+
+        else:
+            print(f"{star_id}-{profile_id}获取传播表现失败")
+
+    """
+    受众分析
+    """
+    @classmethod
+    def ks_list_portrait_info(cls, star_id: str, profile_id: str):
+        url = "https://k.kuaishou.com/rest/web/star/listPortrait"
+
+        payload = json.dumps({
+            "starId": star_id,
+            "starType": 1
+        })
+        headers = {
+            'Accept': 'application/json',
+            'Accept-Language': 'zh-CN,zh;q=0.9',
+            'Connection': 'keep-alive',
+            'Content-Type': 'application/json',
+            'Cookie': 'did=web_9c6a04a4004fdb7c95a658a56ed275b6; apdid=328ac94f-4040-41fe-a038-b60140291aca99fb22e9862c74736f53d57b666ee53b:1719580529:1; language=zh-CN; ud=2205012540; app_id=ks686235996059836592; expire_time=1800; userId=2574854626; didv=1723085291918; ktrace-context=1|MS44NDczNjc0NTc4Njk4ODg0LjkyNDY3NjQzLjE3MjM2MTQ2Mjg2NjEuMzc1MTU4NQ==|MS44NDczNjc0NTc4Njk4ODg0Ljg1OTQzNzM2LjE3MjM2MTQ2Mjg2NjEuMzc1MTU4Ng==|0|kfx-static-next|webservice|true|src-Js; access_token=ChFvYXV0aC5hY2Nlc3NUb2tlbhIwEfqwf_iXlB7qZC-yBIZ7wzfbtvVxWEtcqvOjV3Ahucb4bcg4eEU4ZXJdiGjXL0_DGhImjeJINItPIItBy5OsJyVmCSAiIJC7zfaxc6aWMUNcZnaovyHman1q9FuX6SVwvv78r766KAUwAQ; nc_user_id=CiVhZC5ub3RpZnkuY2VudGVyLm9hdXRoLnVzZXIuaWQuc2VjcmV0EiA9Xlc6pQrv/CfDOcZkppkPR/m+EmFPauz504UqHlT6NhoSrafgX8ChvRXqqk8sQBmlX0bHIiDVB56hHXHIm6E7T5fG/voyXk4XLCiSfZmJ+cBMIezaNigFMAE=; kuaishou.ad.social_st=ChVrdWFpc2hvdS5hZC5zb2NpYWwuc3QSoAFoZ_IW4vs9mw9faWsm7l1U1unH1_dkj033-ggljw2O8ynkHvCFFt0YYAU2ChQgd06Jj53lsHtNgoGFBhkI7zk7h2UJZYTwI5jM0lSBGYTBBz9xGMIfOLqb4WSb5B6YUPfXVNn4wJnUTHrjTkfGjVwbIpVUgu4ybTeDVOstpJDjZF094_Uy-wpsCFXn3cIW60eFgxTmm07hm2BC1yk26r8BGhJtJytzzT9F3o-MaB2XfjahhY8iIPEDbdiIyKie8z8u56eji4V8xu3h7G7Fg-rsS4gxHlrRKAUwAQ; kuaishou.ad.social_ph=dca9139add9f00215f47609bc3d88e43272c; did=web_9c6a04a4004fdb7c95a658a56ed275b6; didv=1711522726000',
+            'Origin': 'https://k.kuaishou.com',
+            'Referer': 'https://k.kuaishou.com/'
+        }
+        response = requests.request("POST", url, headers=headers, data=payload)
+        response = response.json()
+        result = response['result']
+        if result == 1:
+            viewer_portrait = response['data']['viewerPortrait']
+            sex_percentage = viewer_portrait['sexPercentage']  # 性别占比
+            for sex in sex_percentage:
+                sex_type = 'sex_percentage'
+                sex_name = sex['label']
+                sex_proportion = f"{float(sex['value']):.3f}%"
+                sqlCollect.insert_ks_list_portrait_info(star_id, profile_id, sex_type, sex_name, sex_proportion)
+            age_percentage = viewer_portrait['agePercentage']  # 年龄占比
+            for age in age_percentage:
+                age_type = 'age_percentage'
+                age_name = age['label']
+                age_proportion = f"{float(age['value']):.3f}%"
+                sqlCollect.insert_ks_list_portrait_info(star_id, profile_id, age_type, age_name, age_proportion)
+            area_percentage = viewer_portrait['areaPercentage']  # 城市占比
+            for area in area_percentage:
+                area_type = 'area_percentage'
+                area_name = area['label']
+                area_proportion = f"{float(area['value']):.3f}%"
+                sqlCollect.insert_ks_list_portrait_info(star_id, profile_id, area_type, area_name, area_proportion)
+            mobile_brand_percentage = viewer_portrait['mobileBrandPercentage']  # 设备占比
+            for brand in mobile_brand_percentage:
+                brand_type = 'mobile_brand_percentage'
+                brand_name = brand['label']
+                brand_proportion = f"{float(brand['value']):.3f}%"
+                sqlCollect.insert_ks_list_portrait_info(star_id, profile_id, brand_type, brand_name, brand_proportion)
+            mobile_price_percentage = viewer_portrait['mobilePricePercentage']  # 设备价格占比
+            for price in mobile_price_percentage:
+                price_type = 'mobile_price_percentage'
+                price_name = price['label']
+                price_proportion = f"{float(price['value']):.3f}%"
+                sqlCollect.insert_ks_list_portrait_info(star_id, profile_id, price_type, price_name, price_proportion)
+            print(f"{star_id}-{profile_id}获取受众分析入库成功")
+        else:
+            print(f"{star_id}-{profile_id}获取受众分析失败")
+
+
+
+
+if __name__ == '__main__':
+    QplKs.ks_star_info()
+
+
+
+
+
+
+
+
+
+

+ 0 - 178
data_channel/qpl_ks.py

@@ -1,178 +0,0 @@
-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'}, {'旅游': '679'}, {'音乐': '687'}, {'时政资讯': '692'},  {'健康医疗': '684'},
-        #                 {'军事': '701'}, {'教育培训': '685'}, {'生活': '677'}, {'舞蹈': '688'},
-        #                 {'母婴亲子': '676'}, {'萌宠': '691'}, {'情感': '696'}, {'搞笑': '695'}, {'人文': '697'},
-        #                 {'三农': '694'}, {'科学与法律': '693'}, {'读书': '689'}, {'奇人异象': '700'}, {'民生资讯': '703'},
-        #                 {'纪实类': '705'}, {'财经投资': '690'}, {'摄影': '704'}, {'艺术文化': '682'}, {'房产家居': '683'},
-        #                 {'短剧': '674'}, {'时尚': '675'}, {'影视娱乐': '702'}, {'体育运动': '680'}, {'健身达人': '706'},
-        #                 {'星座命理': '699'},  {'汽车': '678'}, {'高新数码': '686'}]
-        content_type = [{'旅游': '679'}, {'音乐': '687'}, {'时政资讯': '692'}, {'健康医疗': '684'},
-                        {'军事': '701'}, {'教育培训': '685'}, {'生活': '677'}, {'舞蹈': '688'},
-                        {'母婴亲子': '676'}, {'萌宠': '691'}, {'情感': '696'}, {'搞笑': '695'}, {'人文': '697'},
-                        {'三农': '694'}, {'科学与法律': '693'}, {'读书': '689'}, {'奇人异象': '700'}, {'民生资讯': '703'},
-                        {'纪实类': '705'}, {'财经投资': '690'}, {'摄影': '704'}, {'艺术文化': '682'}, {'房产家居': '683'},
-                        {'短剧': '674'}, {'时尚': '675'}, {'影视娱乐': '702'}, {'体育运动': '680'}, {'健身达人': '706'},
-                        {'星座命理': '699'}, {'汽车': '678'}, {'高新数码': '686'}]
-        fans_count = [{10000000: 0}, {5000000: 10000000}, {3000000: 5000000}, {1000000: 3000000}, {100000: 1000000},  {0: 100000}]
-
-
-        # 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", "COyUUm", "ROWS", 1, 2)
-                            time.sleep(0.5)
-                            Feishu.update_values("GjGZsmW2ahaCe4tmzDTc58tVnbe", "COyUUm", "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()
-
-
-
-
-
-
-
-
-
-

+ 6 - 0
qpl_cljx_job.py

@@ -0,0 +1,6 @@
+from data_channel.qpl_cljx import QplKs
+
+if __name__ == '__main__':
+    print("开始执行")
+    QplKs.ks_star_info()
+    print("执行结束")