博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快来pick你喜欢的小姐姐吧,Python爬取青春有你2和创造营2020小姐姐数据
阅读量:2071 次
发布时间:2019-04-29

本文共 8629 字,大约阅读时间需要 28 分钟。

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:阿尔法游戏

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

本文将对比《青春有你2》和《创造营2020》全体小姐姐,鉴于两个节目的数据采集和处理过程基本相似,在使用Python做数据爬虫采集的章节中将只以《创造营2020》为例做详细介绍。感兴趣的同学可以照猫画虎去实操一下《青春有你2》的数据爬虫采集,我会在章节中放上其数据源地址。

先看结果

①创造营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日  泰国

在这里插入图片描述

②青春有你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()    出生地  count0   四川   71   江西   32   浙江   33   湖南   34   湖北   3

《青春有你2》小姐姐官方数据比较全,出生地有108/109,且多以市为标尺,我们统计结果如下:

>>>city = df2.groupby('出生地')['编号'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()>>>city.head()   出生地  count0   北京   91   台湾   92   重庆   63   成都   64   上海   5

小姐姐的出生年份分布

出生年份我们合并数据做统一处理吧,一共有160/210份数据,我们统计结果如下:

>>>year = df.groupby('year')['编号'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()>>>year.head()      year  count0  1997.0     271  1995.0     252  1996.0     243  1998.0     204  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   射手座     136   金牛座     137   双鱼座     118   天蝎座     119   巨蟹座     1110  水瓶座     1011  处女座      8

小姐姐身高分布

身高分布我们合并数据做统一处理吧,一共有137/210份数据,我们统计结果如下:

>>>height = df.groupby('身高')['编号'].count().to_frame('count').sort_values(by = 'count',ascending = False).reset_index()>>>height       身高  count0   168.0     271   170.0     112   165.0     113   166.0     114   163.0     105   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 '_': 159032497470816 }17 #请求数据18 re = requests.get(url,headers = headers,params = params) 19 #用json解析json数据成字典 20 data = json.loads(re.text)2122 Li_list = data['data']['itemList']2324 rank = 025 data_list = []2627 #获取每个选手的基础信息28 for li in Li_list:29 rank += 130 item = {
}31 #获取基础信息32 item['当前排名'] = rank33 item['选手编号'] = li['itemInfo']['id']34 item['选手姓名'] = li['itemInfo']['name']35 item['选手照片'] = li['itemInfo']['mapData']['poster_pic']36 item['选手状态'] = li['statusInfo']['voteBtnTxt']3738 #获取选手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]5253 url_ai = item['选手照片']54 #获取腾讯云AI颜值评分55 age,beauty = txfaceScore(url_ai) 56 item['AI预测年龄'] = age57 item['AI颜值评分'] = beauty58 #获取face++颜值评分59 faceage,beauty_w,beauty_m = ksfaceScore(url_ai) 60 item['face++AI预测年龄'] = faceage61 item['face++女性眼中颜值'] = beauty_w62 item['face++男性眼中颜值'] = beauty_m 63 data_list.append(item)6465 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 credentialfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom 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 = httpProfile10        client = iai_client.IaiClient(cred, "ap-beijing", clientProfile) 1112        req = models.DetectFaceRequest()13        #url即我们需要做颜值评分的小姐姐照片所在网页地址url14        param = {
"Url":url,"NeedFaceAttributes":1}15 params = json.dumps(param)16 req.from_json_string(params)1718 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']2425 except TencentCloudSDKException as err: 26 print(err)2728 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']1819 return age,beauty_w,beauty_m

转载地址:http://iwnmf.baihongyu.com/

你可能感兴趣的文章
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(二)— 在linux下搭建redis服务器
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
查看>>
Win10+VS2015编译libcurl
查看>>