快來pick你喜歡的小姐姐吧,Python爬取青春有你2和創造營2020小姐姐數據

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:阿爾法遊戲

PS:如有需要Python學習資料的小夥伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun

本文將對比《青春有你2》和《創造營2020》全體小姐姐,鑑於兩個節目的數據採集和處理過程基本相似,在使用Python做數據爬蟲採集的章節中將只以《創造營2020》爲例做詳細介紹。感興趣的同學可以照貓畫虎去實操一下《青春有你2》的數據爬蟲採集,我會在章節中放上其數據源地址。

先看結果

①創造營2020撐腰榜前三甲

創造營2020撐腰榜前三名分別是 希林娜依·高、陳卓璇 、鄭乃馨

>>>df1[df1['排名']<=3 ][['排名','姓名','身高','體重','生日','出生地']]
    排名      姓名     身高    體重           生日 出生地
0  1.0  希林娜依·高    NaN   NaN  19980731日  新疆
1  2.0     陳卓璇  168.0  42.0  19970813日  貴州
2  3.0     鄭乃馨    NaN   NaN  19970625日  泰國

在這裏插入圖片描述
②青春有你2當前官方榜前三甲

青春有你2官方榜(35進20)前三名分別是 劉雨昕、虞書欣、喻言
在這裏插入圖片描述
在這裏插入圖片描述
③Face++男女視角顏值最高

女性視角顏值第一名

得分95.23,來自《創造營2020》的黃若元(已經告別舞臺)

>>>df.sort_values(by = 'face++女性眼中顏值',ascending = False).head(1)[['face++女性眼中顏值','姓名','來源','身高','體重','生日','出生地']]
    face++女性眼中顏值   姓名       來源  身高  體重         生日  出生地
95         95.23  黃若元  創造營2020 NaN NaN 1996-03-01  NaN

在這裏插入圖片描述
男性視角顏值第一名

得分93.773,來自《創造營2020》的孫珍妮(目前位列撐腰榜第19)

>>>df.sort_values(by = 'face++男性眼中顏值',ascending = False).head(1)[['face++男性眼中顏值','姓名','來源','身高','體重','生日','出生地']]
    face++男性眼中顏值   姓名       來源     身高  體重         生日 出生地
18        93.773  孫珍妮  創造營2020  165.0 NaN 2000-05-05  上海

在這裏插入圖片描述
④小姐姐們籍貫分佈(pyecharts作圖)

創造營小姐姐都來自哪裏呀?

創造營2020的小姐姐有籍貫記錄的41位中,來自四川的有7位,江西、浙江、湖南和湖北的各3位
在這裏插入圖片描述
青春有你小姐姐都來自哪裏呀?

青春有你2小姐姐來自最多的省市分別是北京、臺灣 各9名,重慶、成都各6名
在這裏插入圖片描述
再看下統計分析結果吧

以下是整體數據部分截圖(Spyder變量查看器)
在這裏插入圖片描述
因爲整合的信息較多,共17個字段,我們在做分 數據指標 統分的時候只需要用到部分即可。
在做統計分析時,這裏核心就是一個 分組統計 (df.groupby()
在這裏插入圖片描述
小姐姐出生地分佈

《創造營2020》小姐姐官方信息數據中,出生地只有41/101個,且多以省爲標尺,我們統計結果如下:

>>>pro = df1.groupby('出生地')['編號'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()
>>>pro.head() 
   出生地  count
0   四川   7
1   江西   3
2   浙江   3
3   湖南   3
4   湖北   3

《青春有你2》小姐姐官方數據比較全,出生地有108/109,且多以市爲標尺,我們統計結果如下:

>>>city = df2.groupby('出生地')['編號'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()
>>>city.head()
   出生地  count
0   北京   9
1   臺灣   9
2   重慶   6
3   成都   6
4   上海   5

小姐姐的出生年份分佈

出生年份我們合併數據做統一處理吧,一共有160/210份數據,我們統計結果如下:

>>>year = df.groupby('year')['編號'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()
>>>year.head() 
     year  count
0  1997.0     27
1  1995.0     25
2  1996.0     24
3  1998.0     20
4  1999.0     19

小姐姐星座分佈

星座分佈我們合併數據做統一處理吧,一共有168/210份數據,我們統計結果如下:

 >>>conste = df.groupby('星座')['編號'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()
 >>>conste
      星座  count
 0   獅子座     23
 1   天秤座     19
 2   摩羯座     19
 3   白羊座     16
 4   雙子座     14
 5   射手座     13
6   金牛座     13
7   雙魚座     11
8   天蠍座     11
9   巨蟹座     11
10  水瓶座     10
11  處女座      8

小姐姐身高分佈

身高分佈我們合併數據做統一處理吧,一共有137/210份數據,我們統計結果如下:

>>>height = df.groupby('身高')['編號'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()
>>>height
       身高  count
0   168.0     27
1   170.0     11
2   165.0     11
3   166.0     11
4   163.0     10
5   167.0      9

身高這種屬性,咱們還可以做簡單的描述統計分析如下:
(可以看到,最高175cm,最低158cm,平均167.12cm,中位數168cm)
在這裏插入圖片描述

載入需要的庫

在這裏插入圖片描述
使用requests+json獲取小姐姐列表

《創造營2020》撐腰榜地址:
https://m.v.qq.com/activity/h5/303_index/index.html?ovscroll=0&autoplay=1&actityId=107015

通過F12在開發者界面Network—>XHR中我們可以發現真實數據請求地址(見Headers裏的General),以及請求響應的數據格式 是 json。
在這裏插入圖片描述
真實數據請求地址:

https://zbaccess.video.qq.com/fcgi/getVoteActityRankList?(你應該點不開,因爲請求的時候需要附帶一些參數)

參數可以在Headers裏的Query String Parameters 裏找到於是我們可以編寫以下代碼進行數據爬取

 1def get_Girllist():    
 2    url = 'https://zbaccess.video.qq.com/fcgi/getVoteActityRankList?'    
 3    headers = {"User-Agent": UserAgent(verify_ssl=False).random}    
 4    params = {'raw': 1,
 5               'vappid': 51902973,
 6               'vsecret': '14816bd3d3bb7c03d6fd123b47541a77d0c7ff859fb85f21',
 7               'actityId': 107015,
 8               'pageSize': 101,
 9               'vplatform': 3,
10               'listFlag': 0,
11               'pageContext':'' ,
12               'ver': 1,
13               #以下兩個時間戳參數可以省略
14               '_t': 1590324974706,
15               '_': 1590324974708
16        }
17    #請求數據
18    re = requests.get(url,headers = headers,params = params) 
19    #用json解析json數據成字典   
20    data = json.loads(re.text)
21
22    Li_list = data['data']['itemList']
23
24    rank = 0
25    data_list = []
26
27    #獲取每個選手的基礎信息
28    for li in Li_list:
29        rank += 1
30        item = {}
31        #獲取基礎信息
32        item['當前排名'] = rank
33        item['選手編號'] = li['itemInfo']['id']
34        item['選手姓名'] = li['itemInfo']['name']
35        item['選手照片'] = li['itemInfo']['mapData']['poster_pic']
36        item['選手狀態'] = li['statusInfo']['voteBtnTxt']
37
38        #獲取選手doki頁,需要傳遞選手編號id信息用於循環請求
39        #根據選手編號id到選手doki頁面獲取粉絲數、星座、身高、生日等基礎個人信息
40        #簡單的靜態頁面,這裏用到xpath做解析
41        id_ = item['選手編號']
42        #調用獲取選手doki頁數據的函數,具體見get_Girlinfo函數
43        html = get_Girlinfo(id_)
44        item['粉絲數'] = html.xpath('.//div[@class="followers_count"]/text()')[0]
45        info = html.xpath('.//div[@class="wiki_info_1"]//span[@class="content"]/text()')
46        item['星座'] = info[-5]
47        item['身高'] = info[-3]
48        item['體重'] = info[-2]
49        item['出生地'] = info[-1]
50        info2 = html.xpath('.//div[@class="wiki_info_2"]//span[@class="content"]/text()')
51        item['生日'] = info2[0]
52
53        url_ai = item['選手照片']
54        #獲取騰訊雲AI顏值評分
55        age,beauty = txfaceScore(url_ai) 
56        item['AI預測年齡'] = age
57        item['AI顏值評分'] = beauty
58        #獲取face++顏值評分
59        faceage,beauty_w,beauty_m  = ksfaceScore(url_ai) 
60        item['face++AI預測年齡'] = faceage
61        item['face++女性眼中顏值'] = beauty_w
62        item['face++男性眼中顏值'] = beauty_m   
63        data_list.append(item)
64
65    return data_list

使用requests+xpath獲取小姐姐基礎信息

《創造營2020》選手詳情頁地址:https://v.qq.com/x/star/8262415?tabid=2

以上這個地址是劉些寧同學的個人資料頁百科info,我們可以看到這個網頁動態變化的是8262415,這個數字是個啥?不難發現,這是選手編號id呀,我們在獲取小姐姐列表的時候已經記錄了。基於此,我們可以創建獲取小姐姐百科info的函數如下:
在這裏插入圖片描述
使用requests調用api接口獲取小姐姐顏值評分

一開始我用的是騰訊雲的人臉識別,跑完數據發現101個創造營小姐姐裏有21個顏值得了滿分,而我喜歡的一個小姐姐朱主愛居然得分最低,那怎麼行。所以,本次我們新增了曠視的FACE++人臉識別做顏值評分對比。

騰訊雲人臉識別

騰訊雲人臉識別需要使用到第三方庫tencentcloud-sdk-python

pip install tencentcloud-sdk-python

在進行調用的時候,需要先加載有關包

from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException 
from tencentcloud.iai.v20180301 import iai_client, models 

騰訊雲人臉檢測與分析 檢測給定圖片中的人臉(Face)的位置、相應的面部屬性和人臉質量信息 位置包括 (x,y,w,h)
面部屬性包括性別(gender)、年齡(age)、表情(expression)、魅力(beauty)、眼鏡(glass)、髮型(hair)、口罩(mask)和姿態
(pitch,roll,yaw)
人臉質量信息包括整體質量分(score)、模糊分(sharpness)、光照分(brightness)和五官遮擋分(completeness)

在第一次使用雲 API 之前,用戶首先需要在騰訊雲控制檯上申請安全憑證,安全憑證包括 SecretID 和 SecretKey, SecretID 是用於標識 API 調用者的身份,SecretKey 是用於加密簽名字符串和服務器端驗證簽名字符串的密鑰。SecretKey 必須嚴格保管,避免泄露。
由於我們只需要年齡和顏值評分,因此創建函數時只需要返回age和beauty兩個字段即可。

 1def txfaceScore(url):
 2    try: 
 3        # 實例化一個認證對象,入參需要傳入騰訊雲賬戶 secretId,secretKey
 4        cred = credential.Credential("secretId", "secretKey") 
 5        httpProfile = HttpProfile()
 6        httpProfile.endpoint = "iai.tencentcloudapi.com"
 7
 8        clientProfile = ClientProfile()
 9        clientProfile.httpProfile = httpProfile
10        client = iai_client.IaiClient(cred, "ap-beijing", clientProfile) 
11
12        req = models.DetectFaceRequest()
13        #url即我們需要做顏值評分的小姐姐照片所在網頁地址url
14        param = {"Url":url,"NeedFaceAttributes":1}
15        params = json.dumps(param)
16        req.from_json_string(params)
17
18        resp = client.DetectFace(req) 
19        respstr = resp.to_json_string().replace('false','0').replace('true','1')
20        respdic = eval(respstr)
21        #返回的數據格式是json,所以在轉化爲字典後很簡單就能找到你需要的數據
22        age = respdic['FaceInfos'][0]['FaceAttributesInfo']['Age']
23        beauty = respdic['FaceInfos'][0]['FaceAttributesInfo']['Beauty']
24
25    except TencentCloudSDKException as err: 
26        print(err)
27
28    return age,beauty

Face++人臉識別

Face++人工智能開放平臺文檔中心Detect
API地址:https://console.faceplusplus.com.cn/documents/4888373

接口調用很簡單,設置好你需要的請求參數(這裏我們選擇年齡和顏值:age,beauty),由於Face++顏值評分分爲男女視角下的顏值分兩種,所以我們需要返回三個值:年齡、男/女視角顏值分。
具體函數見下方:

 1def ksfaceScore(pic_url):
 2    url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
 3
 4    APIKey = '你的key' 
 5    APISecret = '你的secret'
 6
 7    data = {"api_key":APIKey,
 8            "api_secret":APISecret,
 9            "image_url":pic_url,
10            "return_attributes":"age,beauty"
11            }
12    res = requests.post(url,data = data)
13    dic_ = eval(res.text)
14    #返回的數據格式是json,所以在轉化爲字典後很簡單就能找到你需要的數據
15    age = dic_['faces'][0]['attributes']['age']['value']
16    beauty_w = dic_['faces'][0]['attributes']['beauty']['female_score']
17    beauty_m = dic_['faces'][0]['attributes']['beauty']['male_score']
18
19    return age,beauty_w,beauty_m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章