用python写个颜值评分器筛选最美主播
作者:Dragon少年 发布时间:2022-11-25 22:13:08
前言
晚上回家闲来无事,想打开某直播平台,看看小姐姐直播。看着一个个多才多艺的小姐姐,眼花缭乱,好难抉择。究竟看哪个小姐姐直播好呢?
今天我们就一起来做个颜值评分器,爬取小姐姐们的直播照片,对每位小姐姐的颜值进行打分排序,选出最靓的star。
一、核心功能设计
总体来说,我们需要做的是获取直播颜值区的主播小姐姐的正在直播的全部主播名称和封面图并保存下来,用百度AI提供的人脸识别接口,进行颜值评分排序,选出颜值最高的。
拆解需求,大致可以整理出核心功能如下:
获取主播直播封面图
打开直播颜值区模块对页面进行分析
发送网络请求,解析数据
保存数据
主播颜值评分
百度人脸识别接口
遍历主播照片,调用颜值检测接口对主播颜值进行打分
对评分进行排序
二、实现步骤
1. 获取主播名称和照片
首先我们选择的是某牙直播,进入首页打开颜值区,按F12可以进入开发者模式。
import requests
# 1.找到数据所在url地址(系统分析网页性质)
url = "https://www.huya.com/g/2168"
headers = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
# 2. 发送网络请求
response = requests.get(url=url, headers=headers)
html_data = response.text
print(html_data)
不难发现所有的小姐姐直播封面对应的都是在li标签里面。我们只要解析获取这些li标签数据就可以了。
接着我们需要拿到直播小姐姐的封面图片,通过分析上面li标签里面的内容,可以发现下面有个a标签,里面的img标签中的data-original不就是我们要的小姐姐图片嘛!
接下来我们想要获取主播小姐姐的名字怎么办呢?点开li标签继续分析,可以看到下面有个span标签,其中的i标签内容就是小姐姐直播的名字。
网页结构我们上面已经分析好了,那么我们就可以来动手爬取我们所需要的数据了。获取到所有的数据资源之后,把图片保存下来即可。文件的下载保存的方式比较多,我用的是通过 with open打开文件的方式 ,比较简单。
# 3. 数据解析
selector = parsel.Selector(html_data)
lis = selector.xpath('//li[@class="game-live-item"]') # 所有li标签
for li in lis:
img_name = li.xpath('.//span[@class="avatar fl"]/i/text()').get() # 主播名字
img_url = li.xpath('.//a/img/@data-original').get() # 主播图片地址
# print(img_name, img_url)
# 请求图片数据
img_data = requests.get(url=img_url).content # 图片数据
# 4. 数据保存
# 准备文件名
file_name = img_name + '.jpg'
with open('img\\' + file_name, mode='wb') as f:
f.write(img_data)
print('正在保存:', file_name)
这样小姐姐的直播名称和照片都可以保存下来了,效果如下:
2. 主播颜值评分
我们调用的是百度开放的人脸识别接口 – 百度AI开放平台链接。
这里面我们可以创建一个人脸识别应用,其中的API Key及Secret Key后面我们调用人脸识别检测接口时会用到。
接下来我们可以看看官方提供的API帮助文档,里面介绍的很详细。包括如何调用请求URL数据格式,向API服务地址使用POST发送请求,必须在URL中带上参数access_token,可通过后台的API Key和Secret Key生成。这里面的API Key和Secret Key就是我们上面提到的。
那我们要的打分颜值分数是哪个呢?提供返回结果参数,可以看到里面有个beauty就是我们要的颜值分数。
这样颜值检测的接口流程基本就已经清楚了,可以进行代码实现了。
其中获取token的时候,需要用到client_id 和 client_secret ,这两个就是上面创建人脸识别应用时提供的。
import base64
import requests
# import pprint
# 获取token
def get_token():
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
# print(response.json())
return response.json()['access_token']
# 颜值检测接口
def face_input(file_path):
with open(file_path, 'rb') as file:
data = base64.b64encode(file.read())
img = data.decode()
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
params = "{\"image\":\"%s\",\"image_type\":\"BASE64\",\"face_field\":\"beauty\"}" % img
access_token = get_token()
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:
beauty = response.json()['result']['face_list'][0]['beauty']
# pprint.pprint(response.json())
return beauty
可以看到result字段里面的beauty就是代表对小姐姐的颜值评分。效果如下:
调用颜值检测接口已经写好了,下面我们要遍历之前保存的所有小姐姐直播照片,对每个进行颜值打分。
path = './img'
img_list = os.listdir(path)
# print(img_list)
score_dict ={}
for img in img_list:
try:
# 提取主播名字
name = img.split('.')[0]
# 构建图片路径
img_path = path + '//' + img
# 调用颜值检测接口
face_score = face_input(img_path)
# print(face_score)
score_dict[name] = face_score
except:
print(f'正在检测{name}| 检测失败')
else:
print(f'正在检测{name}| \t\t 颜值打分为:{face_score}')
最后我们就只需要按照颜值分数进行降序排列,就可以选出颜值最高的小姐姐啦~
sorted_score = sorted(score_dict.items(), key=lambda x: x[1], reverse=True)
# print(sorted_score)
for i, j in enumerate(sorted_score):
print(f'小姐姐名字是:{sorted_score[i][0]} | 颜值名次是:第{i+1}名 | 颜值分数是:{sorted_score[i][1]}')
通过颜值检测,这样就可以找到颜值最高的小姐姐了,颜值打分有90分以上。今天我们就到这里,明天继续努力!不说了,赶紧看直播去~
如果本篇博客有任何错误,请批评指教,不胜感激 !
来源:https://blog.csdn.net/hhladminhhl/article/details/118559310


猜你喜欢
- 本文实例为大家分享了JavaScript实现动态数字时钟的具体代码,供大家参考,具体内容如下实现效果代码实现<!DOCTYPE htm
- 前言本文主要给大家介绍了关于Python中序列的修改、散列与切片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
- 获取操作系统的当前运行状态和负载情况,是一个系统管理员的基本技能,因为这对我们日常排查故障,定位问题有着非常紧密的联系,比如查看当前系统的基
- 一、home页使用frametemplate/home.html<!DOCTYPE html><html lang=&qu
- 本文实例讲述了php使用curl获取https请求的方法。分享给大家供大家参考。具体分析如下:今日在做一个项目,需要curl获取第三方的AP
- <html><head><title>不刷新页面查询的方法</title><meta
- TensorFlow提供了一种统一的格式来存储数据,就是TFRecord,它可以统一不同的原始数据格式,并且更加有效地管理不同的属性。TFR
- 安装pip install faker使用简单使用本库可生成姓名、地址、电话、邮箱、公司等等一系列数据。首先导入库,实例化:from fak
- Python 使用 selenium 进行自动化测试 或者协助日常工作,内容如下所示:1、基础准备需要准备 Python 环境需要安装 se
- 前言numpy支持对矩阵和数组进行运算,因此很多numpy的很多运算都需要指定操作的维数参数axis(当然这些axis都有带默认值的),本博
- vue 百度地图 + 定位 前提需要自己有百度的密钥,如没有可以去百度地图申请一、在主目录下的index.html引入js,例如:
- 数据库系统的安全性包括很多方面。由于很多情况下,数据库服务器容许客户机从网络上连接,因此客户机连接的安全对MySQL数据库安全有很重要的影响
- 过拟合当训练集的的准确率很高, 但是测试集的准确率很差的时候就, 我们就遇到了过拟合 (Overfitting) 的问题. 如图:过拟合产生
- 片头Python看了差不多三四天吧,基本上给基础看差不多了。写个管理系统吧,后续不出意外SQL、文件存储版本都会更。学习Python感想:
- linux默认是安装了python,默认是安装python2.6.6,可能安装的版本是不能符合我们需要的python要求的。我们需要重新安装
- 本文实例讲述了Python实现的本地文件搜索功能。分享给大家供大家参考,具体如下:偶尔需要搜索指定文件,不想每次都在windows下面去搜索
- 首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址: https://www.python.org/downloa
- 一、前提由于我安装了几次,我就不再讲述报错了,有点打脑壳!!!提前把相关依赖和报错就地解决。1、所需源码包mysql-8.0.19.tar.
- CURLOPT_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);如
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。