前言
晚上回家閑來無事,想打開某直播平臺,看看小姐姐直播??粗粋€個多才多藝的小姐姐,眼花繚亂,好難抉擇。究竟看哪個小姐姐直播好呢?
今天我們就一起來做個顏值評分器,爬取小姐姐們的直播照片,對每位小姐姐的顏值進行打分排序,選出最靚的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_credentialsclient_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分以上。今天我們就到這里,明天繼續努力!不說了,趕緊看直播去~



如果本篇博客有任何錯誤,請批評指教,不勝感激 !
到此這篇關于用python寫個顏值評分器篩選最美主播的文章就介紹到這了,更多相關python顏值評分器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python實現在線批量美顏功能過程解析
- Python實現對照片中的人臉進行顏值預測
- 使用python實現男神女神顏值打分系統(推薦)
- python實現知乎高顏值圖片爬取
- python實戰練習之最新男女顏值打分小系統