一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python爬蟲之爬取2020女團選秀數據

Python爬蟲之爬取2020女團選秀數據

2021-09-08 16:19可以叫我才哥 Python

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

一、先看結果

1.1創造營2020撐腰榜前三甲

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

>>>df1[df1["排名"]<=3 ][["排名","姓名","身高","體重","生日","出生地"]]
    排名      姓名     身高    體重           生日 出生地
0  1.0  希林娜依?高    NaN   NaN  1998年07月31日  新疆
1  2.0     陳卓璇  168.0  42.0  1997年08月13日  貴州
2  3.0     鄭乃馨    NaN   NaN  1997年06月25日  泰國

Python爬蟲之爬取2020女團選秀數據

1.2青春有你2當前官方榜前三甲

青春有你2官方榜(35進20)前三名分別是 劉雨昕、虞書欣、喻言

>>>df2[df2["排名"]<=3 ][["排名","姓名","身高","體重","生日","出生地"]]
      排名   姓名     身高    體重           生日 出生地
107  1.0  劉雨昕  168.0  48.0  1997年04月20日  貴陽
117  2.0  虞書欣  169.0  50.0  1995年12月18日  上海
118  3.0   喻言  172.0  50.0  1997年05月26日  北京

Python爬蟲之爬取2020女團選秀數據

1.3Face++男女視角顏值最高

1.3.1女性視角顏值第一名

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

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

Python爬蟲之爬取2020女團選秀數據

1.3.2男性視角顏值第一名

得分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  上海

Python爬蟲之爬取2020女團選秀數據

1.4小姐姐們籍貫分布(pyecharts作圖)

創造營2020的小姐姐有籍貫記錄的41位中,來自四川的有7位,江西、浙江、湖南和湖北的各3位

Python爬蟲之爬取2020女團選秀數據

青春有你2小姐姐來自最多的省市分別是北京、臺灣 各9名,重慶、成都各6名

Python爬蟲之爬取2020女團選秀數據

二、再看下統計分析

以下是整體數據部分截圖(Spyder變量查看器)

Python爬蟲之爬取2020女團選秀數據

因為整合的信息較多,共17個字段,我們在做分 數據指標 統分的時候只需要用到部分即可。
在做統計分析時,這里核心就是一個 分組統計 (df.groupby())。

>>>df.info()
<class "pandas.core.frame.DataFrame">
RangeIndex: 210 entries, 0 to 209
Data columns (total 17 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   排名            136 non-null    float64
 1   編號            210 non-null    int64  
 2   姓名            210 non-null    object 
 3   照片            210 non-null    object 
 4   狀態            210 non-null    object 
 5   粉絲數           101 non-null    object 
 6   星座            168 non-null    object 
 7   身高            137 non-null    float64
 8   體重            120 non-null    float64
 9   出生地           149 non-null    object 
 10  生日            160 non-null    object 
 11  AI預測年齡        210 non-null    int64  
 12  AI顏值評分        210 non-null    int64  
 13  face++AI預測年齡  210 non-null    int64  
 14  face++女性眼中顏值  210 non-null    float64
 15  face++男性眼中顏值  210 non-null    float64
 16  來源            210 non-null    object 
dtypes: float64(5), int64(4), object(8)
memory usage: 28.0+ KB

2.1小姐姐出生地分布

《創造營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

2.2小姐姐的出生年份分布

出生年份我們合并數據做統一處理吧,一共有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

2.3小姐姐星座分布

星座分布我們合并數據做統一處理吧,一共有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

2.4小姐姐身高分布

身高分布我們合并數據做統一處理吧,一共有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)

>>>df["身高"].describe()
count    137.000000
mean     167.124088
std        4.080883
min      158.000000
25%      165.000000
50%      168.000000
75%      170.000000
max      175.000000
Name: 身高, dtype: float64

2.5小姐姐體重分布

體重分布我們合并數據做統一處理吧,一共有120/210份數據,我們統計結果如下:

>>>weight = df.groupby("體重")["編號"].count().to_frame("count").sort_values(by = "count",ascending = False).reset_index()
>>>weight.head() 
     體重  count
0  48.0     20
1  46.0     15
2  50.0     13
3  47.0     13
4  49.0     12

身高這種屬性,咱們還可以做簡單的描述統計分析如下:
(可以看到,最高87kg???,最低40kg,平均48kg,中位數48kg)

>>>df["體重"].describe()
count    120.000000
mean      48.012500
std        5.081877
min       40.000000
25%       46.000000
50%       48.000000
75%       50.000000
max       87.000000
Name: 體重, dtype: float64

趕快查一下這個87KG的妹子是誰,看了下照片,感覺是官網數據填錯了吧,應該47kg或者87斤?才對吧,算了不改了~

>>>df[df["體重"]==87][["編號","姓名","來源"]] 
            編號   姓名     來源
170  540476547  孫美楠  青春有你2

Python爬蟲之爬取2020女團選秀數據

2.6小姐姐顏值分布

因為騰訊云ai評分,過百的就有40來個,咱們還是用Face++吧

顏值評分這個因為是精確到了小數點后3位,所以咱們在做統分的時候,更適合先進行分箱操作

2.6.1女性角度顏值評分

先看描述統計分析結果:

(可以看到,最高95.23,最低65.596,平均83.742,中位數84.837)

>>>df["face++女性眼中顏值"].describe() 
count    210.000000
mean      83.742038
std        5.340208
min       65.596000
25%       81.028000
50%       84.837500
75%       87.449750
max       95.230000
Name: face++女性眼中顏值, dtype: float64

顏值按照60-100每10分一個檔位,我們統計結果如下:

90分以上顏值居然高達16位~

>>>beauty_bins = [60,70,80,90,100] 
>>>beauty_labels = ["60-70", "70-80", "80-90", "90-100"]
>>>df["face++女-顏值區間"] = pd.cut(df["face++女性眼中顏值"], bins=beauty_bins, labels=beauty_labels)
>>>df["face++女-顏值區間"].value_counts() 
80-90     155
70-80      34
90-100     16
60-70       5
Name: face++女-顏值區間, dtype: int64

2.6.2男性角度顏值評分

先看描述統計分析結果:

(可以看到,最高93.77,最低66.404,平均82.606,中位數83.482)

>>>df["face++男性眼中顏值"].describe() 
count    210.000000
mean      82.605929
std        5.055116
min       66.404000
25%       79.699250
50%       83.482500
75%       86.409000
max       93.773000
Name: face++男性眼中顏值, dtype: float64

顏值按照60-100每10分一個檔位,我們統計結果如下:

90分以上顏值居然只有6位~【難道男性對顏值的要求更高???】

>>>df["face++男-顏值區間"].value_counts() 
80-90     147
70-80      52
90-100      6
60-70       5
Name: face++男-顏值區間, dtype: int64

三、載入需要的庫

import requests
from fake_useragent import UserAgent
import pandas as pd
import json
from lxml import etree

3.1使用requests+json獲取小姐姐列表

通過F12在開發者界面Network―>XHR中我們可以發現真實數據請求地址(見Headers里的General),以及請求響應的數據格式 是 json。

Python爬蟲之爬取2020女團選秀數據

參數可以在Headers里的Query String Parameters 里找到

于是我們可以編寫以下代碼進行數據爬取

def get_Girllist():    
    url = "https://zbaccess.video.qq.com/fcgi/getVoteActityRankList?"    
    headers = {"User-Agent": UserAgent(verify_ssl=False).random}    
    params = {"raw": 1,
               "vappid": 51902973,
               "vsecret": "14816bd3d3bb7c03d6fd123b47541a77d0c7ff859fb85f21",
               "actityId": 107015,
               "pageSize": 101,
               "vplatform": 3,
               "listFlag": 0,
               "pageContext":"" ,
               "ver": 1,
               #以下兩個時間戳參數可以省略
               "_t": 1590324974706,
               "_": 1590324974708
        }
    #請求數據
    re = requests.get(url,headers = headers,params = params) 
    #用json解析json數據成字典   
    data = json.loads(re.text)
    
    Li_list = data["data"]["itemList"]
    
    rank = 0
    data_list = []
    
    #獲取每個選手的基礎信息
    for li in Li_list:
        rank += 1
        item = {}
        #獲取基礎信息
        item["當前排名"] = rank
        item["選手編號"] = li["itemInfo"]["id"]
        item["選手姓名"] = li["itemInfo"]["name"]
        item["選手照片"] = li["itemInfo"]["mapData"]["poster_pic"]
        item["選手狀態"] = li["statusInfo"]["voteBtnTxt"]
        
        #獲取選手doki頁,需要傳遞選手編號id信息用于循環請求
        #根據選手編號id到選手doki頁面獲取粉絲數、星座、身高、生日等基礎個人信息
        #簡單的靜態頁面,這里用到xpath做解析
        id_ = item["選手編號"]
        #調用獲取選手doki頁數據的函數,具體見get_Girlinfo函數
        html = get_Girlinfo(id_)
        item["粉絲數"] = html.xpath(".//div[@class="followers_count"]/text()")[0]
        info = html.xpath(".//div[@class="wiki_info_1"]//span[@class="content"]/text()")
        item["星座"] = info[-5]
        item["身高"] = info[-3]
        item["體重"] = info[-2]
        item["出生地"] = info[-1]
        info2 = html.xpath(".//div[@class="wiki_info_2"]//span[@class="content"]/text()")
        item["生日"] = info2[0]

        url_ai = item["選手照片"]
        #獲取騰訊云AI顏值評分
        age,beauty = txfaceScore(url_ai) 
        item["AI預測年齡"] = age
        item["AI顏值評分"] = beauty
        #獲取face++顏值評分
        faceage,beauty_w,beauty_m  = ksfaceScore(url_ai) 
        item["face++AI預測年齡"] = faceage
        item["face++女性眼中顏值"] = beauty_w
        item["face++男性眼中顏值"] = beauty_m   
        data_list.append(item)
        
    return data_list

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

def get_Girlinfo(id_):
    url_ = f"https://v.qq.com/x/star/{id_}?tabid=2"
    headers = {"User-Agent": UserAgent(verify_ssl=False).random} 
    re_ = requests.get(url_,headers = headers)
    #直接獲取的數據中中文是亂碼,我們轉化一下編碼格式即可
    re_.encoding="utf-8"
    #因本次爬蟲我們解析網站源碼用到的是xpath,所以需要處理一下
    html = etree.HTML(re_.text)
    #返回處理后的網站數據源碼,在小姐姐列表中我們再行處理
    return html

四、使用requests調用api接口獲取小姐姐顏值評分

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

4.1騰訊云人臉識別

騰訊云人臉識別需要使用到第三方庫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兩個字段即可。

def txfaceScore(url):
    try: 
    	# 實例化一個認證對象,入參需要傳入騰訊云賬戶 secretId,secretKey
        cred = credential.Credential("secretId", "secretKey") 
        httpProfile = HttpProfile()
        httpProfile.endpoint = "iai.tencentcloudapi.com"
    
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = iai_client.IaiClient(cred, "ap-beijing", clientProfile) 
    
        req = models.DetectFaceRequest()
        #url即我們需要做顏值評分的小姐姐照片所在網頁地址url
        param = {"Url":url,"NeedFaceAttributes":1}
        params = json.dumps(param)
        req.from_json_string(params)
    
        resp = client.DetectFace(req) 
        respstr = resp.to_json_string().replace("false","0").replace("true","1")
        respdic = eval(respstr)
        #返回的數據格式是json,所以在轉化為字典后很簡單就能找到你需要的數據
        age = respdic["FaceInfos"][0]["FaceAttributesInfo"]["Age"]
        beauty = respdic["FaceInfos"][0]["FaceAttributesInfo"]["Beauty"]
        
    except TencentCloudSDKException as err: 
        print(err)
    
    return age,beauty

4.2Face++人臉識別

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

具體函數見下方:

def ksfaceScore(pic_url):
    url = "https://api-cn.faceplusplus.com/facepp/v3/detect"
    
    APIKey = "你的key" 
    APISecret = "你的secret"
    
    data = {"api_key":APIKey,
            "api_secret":APISecret,
            "image_url":pic_url,
            "return_attributes":"age,beauty"
            }
    res = requests.post(url,data = data)
    dic_ = eval(res.text)
    #返回的數據格式是json,所以在轉化為字典后很簡單就能找到你需要的數據
    age = dic_["faces"][0]["attributes"]["age"]["value"]
    beauty_w = dic_["faces"][0]["attributes"]["beauty"]["female_score"]
    beauty_m = dic_["faces"][0]["attributes"]["beauty"]["male_score"]
    
    return age,beauty_w,beauty_m

到此這篇關于Python爬蟲之爬取2020女團選秀數據的文章就介紹到這了,更多相關python爬取女團內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/dxawdc/article/details/106354234

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩欧美中文在线 | 精品手机在线1卡二卡3卡四卡 | 喷奶水榨乳ova动漫无修 | 男同激情视频 | 特级老女人淫片高清视频 | 2022国产麻豆剧果冻传媒入口 | 男女做受快插大片 | 精品一区二区三区波多野结衣 | 日本激情网站 | 性刺激欧美三级在线现看中文 | 91啦中文在线观看 | 99国产高清久久久久久网站 | 日本福利网 | 操极品女神 | 成人免费淫片95视频观看网站 | 国产绿帽 | 精品手机在线1卡二卡3卡四卡 | 97国产蝌蚪视频在线观看 | 99爱在线观看精品视频 | 干操网| 午夜亚洲福利 | 免费观看视频网站 | 亚洲冬月枫中文字幕在线看 | 国产亚洲欧美日韩综合综合二区 | 国产caonila在线观看 | 色综合国产| 果冻传媒和91制片厂网站软件 | 91精品免费国产高清在线 | 岛国最新资源网站 | 欧美专区在线观看 | 国产精品永久免费自在线观看 | 国偷盗摄自产福利一区在线 | 羞羞视频免费观 | 精品久久亚洲 | 雪恋电影完整版免费观看 | 成年男女免费视频观看性 | 亚洲欧美一区二区三区在线观看 | yellow片在线观看| 日韩欧美中文字幕一区二区三区 | 国产精品成人 | sao虎在线精品永久 s0e一923春菜花在线播放 |