实践应用|快来pick你喜欢的小姐姐吧,Python爬取青春有你2和创造营2020小姐姐数据
文章目录
- 先看结果
- ①创造营2020撑腰榜前三甲
- ②青春有你2当前官方榜前三甲
- ③Face++男女视角颜值最高
- 女性视角颜值第一名
- 男性视角颜值第一名
- ④小姐姐们籍贯分布(pyecharts作图)
- 创造营小姐姐都来自哪里呀?
- 青春有你小姐姐都来自哪里呀?
- 0、再看下统计分析结果吧
- 0.1小姐姐出生地分布
- 0.2小姐姐的出生年份分布
- 0.3小姐姐星座分布
- 0.4小姐姐身高分布
- 0.5小姐姐体重分布
- 0.5小姐姐颜值分布
- 0.5.1女性角度颜值评分
- 0.5.2女性角度颜值评分
- 1、载入需要的库
- 2、使用requests+json获取小姐姐列表
- 3、使用requests+xpath获取小姐姐基础信息
- 4、使用requests调用api接口获取小姐姐颜值评分
- 4.1腾讯云人脸识别
- 4.2Face++人脸识别
本文将对比《青春有你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)前三名分别是 刘雨昕、虞书欣、喻言
>>>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日 北京
③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名
0、再看下统计分析结果吧
以下是整体数据部分截图(Spyder变量查看器)
因为整合的信息较多,共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 float641 编号 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 float648 体重 120 non-null float649 出生地 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 float6415 face++男性眼中颜值 210 non-null float6416 来源 210 non-null object
dtypes: float64(5), int64(4), object(8)
memory usage: 28.0+ KB
0.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
0.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
0.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
0.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
0.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
0.5小姐姐颜值分布
因为腾讯云ai评分,过百的就有40来个,咱们还是用Face++吧
颜值评分这个因为是精确到了小数点后3位,所以咱们在做统分的时候,更适合先进行分箱操作
0.5.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
0.5.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
1、载入需要的库
import requests
from fake_useragent import UserAgent
import pandas as pd
import json
from lxml import etree
2、使用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 里找到
于是我们可以编写以下代码进行数据爬取
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 = 0data_list = []#获取每个选手的基础信息for li in Li_list:rank += 1item = {}#获取基础信息item['当前排名'] = rankitem['选手编号'] = 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预测年龄'] = ageitem['AI颜值评分'] = beauty#获取face++颜值评分faceage,beauty_w,beauty_m = ksfaceScore(url_ai) item['face++AI预测年龄'] = faceageitem['face++女性眼中颜值'] = beauty_witem['face++男性眼中颜值'] = beauty_m data_list.append(item)return data_list
3、使用requests+xpath获取小姐姐基础信息
《创造营2020》选手详情页地址:
https://v.qq.com/x/star/8262415?tabid=2
以上这个地址是刘些宁同学的个人资料页百科info,我们可以看到这个网页动态变化的是8262415,这个数字是个啥?不难发现,这是选手编号id呀,我们在获取小姐姐列表的时候已经记录了。基于此,我们可以创建获取小姐姐百科info的函数如下:
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
4、使用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,secretKeycred = credential.Credential("secretId", "secretKey") httpProfile = HttpProfile()httpProfile.endpoint = "iai.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = iai_client.IaiClient(cred, "ap-beijing", clientProfile) req = models.DetectFaceRequest()#url即我们需要做颜值评分的小姐姐照片所在网页地址urlparam = {"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++人脸识别
Face++人工智能开放平台文档中心Detect
API地址:https://console.faceplusplus.com.cn/documents/4888373
接口调用很简单,设置好你需要的请求参数(这里我们选择年龄和颜值: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
实践应用|快来pick你喜欢的小姐姐吧,Python爬取青春有你2和创造营2020小姐姐数据相关推荐
- 三分钟教会你用Python爬取到喜欢的小姐姐图片
使用Python爬取小姐姐图片 首先上网站链接 唯vb.net教程 美女生 爬取图片主要分为一下几步: 1.打开一个你喜欢c#教程的小姐姐的网站 E.g xiaojiejie web 2.下载并安装p ...
- python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片
原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...
- Python爬取北京2.3万条租房信息,发现快租不起房子了!
1.概述 北上广深作为打工人最多的超一线城市,大部分都是租房生活着.自如作为目前第三方租房平台,应该算是该行业的龙头.但是最近蛋壳的暴雷,我们不得不更加警觉.那么自如都有多少open状态的房源呢,这些 ...
- 朋友很喜欢打篮球,我用Python爬取了1000张他喜欢的NBA球星图片送给他【内附源码】
大家好,我是辣条. 前言 朋友快过生日了,不知道送啥礼物[绝对不是因为我抠],想着他非常喜欢打篮球,篮球他很多个了,应该也不会缺[不会是因为篮球贵],那我就用技术白嫖点东西送给他吧,爬虫首当其冲呀,必 ...
- python爬取知乎话题广场_学习python爬虫---爬虫实践:爬取B站排行榜2(爬取全部分类排行榜、利用pygal库作图)...
前面我们爬取了B站上全站的排行榜,详细见:魏勇:学习python爬虫---爬虫实践:爬取B站排行榜zhuanlan.zhihu.com 一.爬取全部分类排行榜 我们观察一下B站排行榜,那里还有番剧排 ...
- 用Python爬取购物节当天热门商品销量数据,看看大家喜欢什么
618购物节,准备分析一波购物节大家都喜欢买什么 一.获取数据 1. 分析网页 在编写代码之前,先来分析一波网页. 上面是某东的畅销商品,通过分析,该网页有异步加载(前面10个商品是静态加载,剩下的是 ...
- python爬取数据实践,以及趟过的坑
1.总体流程 总体思路是:先爬下所有的百度知道的搜索结果页面中的链接,有了链接再继续爬链接里的页面数据. 核心流程如下: Created with Raphaël 2.2.0 开始 输入关键词和页数 ...
- python爬取百度新闻_火车浏览器网络爬虫实践6:以“陕茶”为例爬取百度新闻搜索结果...
每天进步一点点,这是我2019年的小目标. 这是第6次学习与实践笔记了,这一次咱们把对象转移到百度搜索去,尝试使用火车浏览器爬虫工具来采集百度新闻搜索的结果,并做简单数据可视化展示. 01 抓取需求 ...
- Python 爬取诗词分析古人最喜欢用的诗词
"知之为知之,不知为不知,是知也~",最近突然迷恋古诗词,体验下文人雅士,迁客骚人的生活,并跟随杜牧,李白感受下千百年前社会(给自己点赞~),不过突然我在想,这么多古诗,这么多作者 ...
最新文章
- “恶意版”俄罗斯方块游戏火了,永远给你不想要的方块,世界纪录才消掉31行...
- springmvc处理ajax请求
- 《Java 核心技术卷1 第10版》学习笔记------日志
- boost::function_types::is_member_pointer用法的测试程序
- 大剑无锋之SQL求用户最近的登录时间【面试推荐】
- 容器源码解析之容器全貌(一)
- BZOJ 4002--有意义的字符串(矩阵乘法)
- Postgresql - MATERIALIZED VIEW
- eigrp 负载均衡和非负载均衡实验
- 【玩转Ubuntu】02. Ubuntu上搭建Android开发环境
- Orcle中Database Control - orcl打开错误或者打不开的解决办法
- 苹果手机内屏幕出现彩色条纹怎么办
- win10弹出计算机内存不足,主编解答win10系统提示“计算机内存不足”的解决方案...
- Ubuntu16.04系统迁移SSD
- 移动端框架lib-flexible
- 【线性代数】机器学习·算法必备 线性代数总结
- 如何利用AI(ChatGPT、NewBing、PHIND、YouChat)实现多智能体系统一致性仿真的代码编写
- Mac xmind安装与破解版
- 2021-10-26MT4、MT5如何加载使用EA和指标
- 头条、油条商标有多像?Python检测发现相似度高达98.4%!
热门文章
- SIMATIC WINCC与PLC进行以太网通信的具体组态方法和步骤
- android实现LED发光字效果实战
- APP开发者如何选对聚合广告平台
- 在线教育:直播课堂会有哪些问题?
- 第19课 Altium Designer20(AD20)+VESC6.4实战教程:PCB布局完成 (北冥有鱼)
- Ansys-结构动力学分析-单自由度系统谐响应分析学习收获
- JSP中的include指令和include动作的区别
- win7下chm文件打不开“确保 Web 地址 //ieframe.dll/dnserrordiagoff.htm# 正确。 “
- 蛋花花:人工智能对于绿色发展的意义
- 2021年资源、环境与绿色经济国际学术会议 (CREGE 2021)