用python寫個(gè)顏值評(píng)分器篩選最美主播
前言
晚上回家閑來(lái)無(wú)事,想打開(kāi)某直播平臺(tái),看看小姐姐直播??粗粋€(gè)個(gè)多才多藝的小姐姐,眼花繚亂,好難抉擇。究竟看哪個(gè)小姐姐直播好呢?
今天我們就一起來(lái)做個(gè)顏值評(píng)分器,爬取小姐姐們的直播照片,對(duì)每位小姐姐的顏值進(jìn)行打分排序,選出最靚的star。
一、核心功能設(shè)計(jì)
總體來(lái)說(shuō),我們需要做的是獲取直播顏值區(qū)的主播小姐姐的正在直播的全部主播名稱和封面圖并保存下來(lái),用百度AI提供的人臉識(shí)別接口,進(jìn)行顏值評(píng)分排序,選出顏值最高的。
拆解需求,大致可以整理出核心功能如下:
獲取主播直播封面圖
- 打開(kāi)直播顏值區(qū)模塊對(duì)頁(yè)面進(jìn)行分析
- 發(fā)送網(wǎng)絡(luò)請(qǐng)求,解析數(shù)據(jù)
- 保存數(shù)據(jù)
主播顏值評(píng)分
- 百度人臉識(shí)別接口
- 遍歷主播照片,調(diào)用顏值檢測(cè)接口對(duì)主播顏值進(jìn)行打分
- 對(duì)評(píng)分進(jìn)行排序
二、實(shí)現(xiàn)步驟
1. 獲取主播名稱和照片
首先我們選擇的是某牙直播,進(jìn)入首頁(yè)打開(kāi)顏值區(qū),按F12可以進(jìn)入開(kāi)發(fā)者模式。
import requests # 1.找到數(shù)據(jù)所在url地址(系統(tǒng)分析網(wǎng)頁(yè)性質(zhì)) 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. 發(fā)送網(wǎng)絡(luò)請(qǐng)求 response = requests.get(url=url, headers=headers) html_data = response.text print(html_data)
不難發(fā)現(xiàn)所有的小姐姐直播封面對(duì)應(yīng)的都是在li標(biāo)簽里面。我們只要解析獲取這些li標(biāo)簽數(shù)據(jù)就可以了。
接著我們需要拿到直播小姐姐的封面圖片,通過(guò)分析上面li標(biāo)簽里面的內(nèi)容,可以發(fā)現(xiàn)下面有個(gè)a標(biāo)簽,里面的img標(biāo)簽中的data-original不就是我們要的小姐姐圖片嘛!
接下來(lái)我們想要獲取主播小姐姐的名字怎么辦呢?點(diǎn)開(kāi)li標(biāo)簽繼續(xù)分析,可以看到下面有個(gè)span標(biāo)簽,其中的i標(biāo)簽內(nèi)容就是小姐姐直播的名字。
網(wǎng)頁(yè)結(jié)構(gòu)我們上面已經(jīng)分析好了,那么我們就可以來(lái)動(dòng)手爬取我們所需要的數(shù)據(jù)了。獲取到所有的數(shù)據(jù)資源之后,把圖片保存下來(lái)即可。文件的下載保存的方式比較多,我用的是通過(guò) with open打開(kāi)文件的方式 ,比較簡(jiǎn)單。
# 3. 數(shù)據(jù)解析 selector = parsel.Selector(html_data) lis = selector.xpath('//li[@class="game-live-item"]') # 所有l(wèi)i標(biāo)簽 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) # 請(qǐng)求圖片數(shù)據(jù) img_data = requests.get(url=img_url).content # 圖片數(shù)據(jù) # 4. 數(shù)據(jù)保存 # 準(zhǔn)備文件名 file_name = img_name + '.jpg' with open('img\\' + file_name, mode='wb') as f: f.write(img_data) print('正在保存:', file_name)
這樣小姐姐的直播名稱和照片都可以保存下來(lái)了,效果如下:
2. 主播顏值評(píng)分
我們調(diào)用的是百度開(kāi)放的人臉識(shí)別接口 – 百度AI開(kāi)放平臺(tái)鏈接。
這里面我們可以創(chuàng)建一個(gè)人臉識(shí)別應(yīng)用,其中的API Key及Secret Key后面我們調(diào)用人臉識(shí)別檢測(cè)接口時(shí)會(huì)用到。
接下來(lái)我們可以看看官方提供的API幫助文檔,里面介紹的很詳細(xì)。包括如何調(diào)用請(qǐng)求URL數(shù)據(jù)格式,向API服務(wù)地址使用POST發(fā)送請(qǐng)求,必須在URL中帶上參數(shù)access_token,可通過(guò)后臺(tái)的API Key和Secret Key生成。這里面的API Key和Secret Key就是我們上面提到的。
那我們要的打分顏值分?jǐn)?shù)是哪個(gè)呢?提供返回結(jié)果參數(shù),可以看到里面有個(gè)beauty就是我們要的顏值分?jǐn)?shù)。
這樣顏值檢測(cè)的接口流程基本就已經(jīng)清楚了,可以進(jìn)行代碼實(shí)現(xiàn)了。
其中獲取token的時(shí)候,需要用到client_id 和 client_secret ,這兩個(gè)就是上面創(chuàng)建人臉識(shí)別應(yīng)用時(shí)提供的。
import base64 import requests # import pprint # 獲取token def get_token(): # client_id 為官網(wǎng)獲取的AK, client_secret 為官網(wǎng)獲取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網(wǎng)獲取的AK】&client_secret=【官網(wǎng)獲取的SK】' response = requests.get(host) if response: # print(response.json()) return response.json()['access_token'] # 顏值檢測(cè)接口 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就是代表對(duì)小姐姐的顏值評(píng)分。效果如下:
調(diào)用顏值檢測(cè)接口已經(jīng)寫好了,下面我們要遍歷之前保存的所有小姐姐直播照片,對(duì)每個(gè)進(jìn)行顏值打分。
path = './img' img_list = os.listdir(path) # print(img_list) score_dict ={} for img in img_list: try: # 提取主播名字 name = img.split('.')[0] # 構(gòu)建圖片路徑 img_path = path + '//' + img # 調(diào)用顏值檢測(cè)接口 face_score = face_input(img_path) # print(face_score) score_dict[name] = face_score except: print(f'正在檢測(cè){name}| 檢測(cè)失敗') else: print(f'正在檢測(cè){name}| \t\t 顏值打分為:{face_score}')
最后我們就只需要按照顏值分?jǐn)?shù)進(jìn)行降序排列,就可以選出顏值最高的小姐姐啦~
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}名 | 顏值分?jǐn)?shù)是:{sorted_score[i][1]}')
通過(guò)顏值檢測(cè),這樣就可以找到顏值最高的小姐姐了,顏值打分有90分以上。今天我們就到這里,明天繼續(xù)努力!不說(shuō)了,趕緊看直播去~
如果本篇博客有任何錯(cuò)誤,請(qǐng)批評(píng)指教,不勝感激 !
到此這篇關(guān)于用python寫個(gè)顏值評(píng)分器篩選最美主播的文章就介紹到這了,更多相關(guān)python顏值評(píng)分器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyTorch中Tensor和tensor的區(qū)別及說(shuō)明
這篇文章主要介紹了PyTorch中Tensor和tensor的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07python threading和multiprocessing模塊基本用法實(shí)例分析
這篇文章主要介紹了python threading和multiprocessing模塊基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python中threading和multiprocessing模塊基本概念、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-07-07matplotlib圖形整合之多個(gè)子圖繪制的實(shí)例代碼
matplotlib繪制多個(gè)子圖的時(shí)候,我們可以根據(jù)自己的想法去排列子圖的順序,也可以生成不同的子圖數(shù)量,本文就詳細(xì)的介紹了matplotlib 多子圖繪制,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04python 密碼學(xué)示例——理解哈希(Hash)算法
這篇文章主要介紹了哈希(Hash)算法的相關(guān)資料,幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下2020-09-09Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例
這篇文章主要為大家介紹了Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06