前言 嗨嘍~大家好呀,這裡是魔王吶 ! 在這平凡的一日,我決定~ 乾一件平凡的事~讓我們開動起我們的小手 來做一個小小的顏值檢測叭~ 開發環境: Python 3.8 Pycharm 2021.2 模塊使用: requests >>> pip install requests tqdm >>> pi ...
前言
嗨嘍~大家好呀,這裡是魔王吶 !
在這平凡的一日,我決定~
乾一件平凡的事~讓我們開動起我們的小手
來做一個小小的顏值檢測叭~
開發環境:
-
Python 3.8
-
Pycharm 2021.2
模塊使用:
-
requests >>> pip install requests
-
tqdm >>> pip install tqdm 簡單實現進度條效果
-
os
-
base64
本次分為兩部分:
第一部分 採集主播照片數據
第二部分 實現顏值檢測 進行排名
基本流程思路:
一. 數據來源分析:
1、明確需求, 採集那個網站上面什麼數據
2、通過開發者工具進行抓包分析, 分析我們想要照片數據來源
- F12 或者 滑鼠右鍵點擊檢查 選擇 network 打開
二. 代碼實現步驟:
1、發送請求, 模擬瀏覽器對於url地址發送請求
2、獲取數據, 獲取伺服器返迴響應數據 ---> 開發者工具當中 response
3、解析數據, 提取我們想要數據內容 圖片url 以及 主播名字
4、保存數據, 照片圖片保存本地
代碼
導入模塊
# 導入數據請求模塊 --> 第三方模塊 需要 在cmd裡面 pip install requests import requests # 導入格式化輸出模塊 ---> 內置模塊 不需要安裝 from pprint import pprint import base64 import os from tqdm import tqdm
採集圖片
""" 1. 發送請求, 模擬瀏覽器對於url地址發送請求 - 當你請求url地址, 是長鏈接的時候, 我們是可以分段寫 https://www..com/cache.php? m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page=2 - 如何實現批量替換 選中替換的內容, 輸入 ctrl + r 輸入正則命令 (.*?): (.*) '$1': '$2', - 模擬偽裝瀏覽器 ---> 請求頭參數 可以直接在開發者工具裡面進行複製 - 加文章下方老師VX 1. 領取python常用單詞辭彙彙總 2. 領取一個插件 翻譯插件 - 等號左邊都是屬於自定義變數, 你自己定義變數 - 不能以數字開頭 - 不推薦使用關鍵字命名 - 最好是見明知意 """ # 確定請求url地址 url = 'https://www..com/cache.php' # 請求參數 ---> 字典數據類型, 構建完整鍵值對形式 data = { 'm': 'LiveList', 'do': 'getLiveListByPage', 'gameId': '2168', 'tagAll': '0', # 'callback': 'getLiveListJsonpCallback', 'page': '2', } # 模擬瀏覽器 ---> 請求頭 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } # 發送請求 ---> <Response [200]> 響應對象 200狀態碼表示請求成功 response = requests.get(url=url, params=data, headers=headers) """ 2. 獲取數據, 獲取伺服器返迴響應數據 response.text 獲取文本數據 ---> 字元串數據類型 為了更加方便提取數據, 可以獲取json字典數據 如果你想要獲取json數據, 但是請求參數裡面有 callback 可以刪除 callback response.json() 獲取json數據 ---> 字典數據類型 3. 解析數據, 提取我們想要數據內容 - 當你的數據是字典數據, 可以使用pprint模塊 進行格式化輸出列印, 效果更好 如果你print列印字典數據, 呈現一行 如果你pprint列印字典數據, 呈現多行, 展開的效果 更加方便取值 - 字典取值 ---> 鍵值對取值, 根據冒號左邊的內容[鍵], 提取冒號右邊的內容[值] """ # for迴圈遍歷 一個一個提取列表裡面元素 for index in response.json()['data']['datas']: # 獲取名字 name = index['nick'] # 獲取圖片url img_url = index['screenshot'].split('?')[0] """ 4. 保存數據 ---> 對於圖片url地址發送請求, 獲取數據 - FileNotFoundError: [Errno 2] No such file or directory: 'img知恩丶小晴天.jpg' 沒有文件夾 ---> 1. 手動創建 2. 自動創建 """ # 獲取圖片二進位數據 img_content = requests.get(url=img_url, headers=headers).content # 保存數據內容 with open('img' + name + '.jpg', mode='wb') as f: # 寫入數據 f.write(img_content) print(name, img_url)
顏值檢測
def get_beauty(img_base64): # client_id 為官網獲取的AK, client_secret 為官網獲取的SK host = 'https://aip.baidubce.com/oauth/2.0/token' # 【官網獲取的AK】 和 【官網獲取的SK】 在百度雲創建好應用之後, 就有的 params = { 'grant_type': 'client_credentials', 'client_id': 'quXbPEiGM2bKK77NV2vwsd53', 'client_secret': 'hRa4ox5WYLgU1cCm5bP2kU0GWnOqos76', } response = requests.get(url=host, params=params) # 獲取 access_token 值 access_token = response.json()['access_token'] request_url = f"https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={access_token}" data = { # 傳入圖片 base64內容 "image": img_base64, "image_type": "BASE64", "face_field": "beauty" } headers = {'content-type': 'application/json'} json_data = requests.post(request_url, data=data, headers=headers).json() try: beauty = json_data['result']['face_list'][0]['beauty'] return beauty except: return '識別失敗' # img_file = open('img\\悅欣-玻璃.jpg', mode='rb') # img_base64 = base64.b64encode(img_file.read()) # beauty = get_beauty(img_base64) # print(f'顏值評分是:', beauty) lis = [] files = os.listdir('img\\') print('正在顏值檢測中, 請稍後.......') for file in tqdm(files[:10]): img_file = 'img\\' + file img = open(img_file, mode='rb') img_base64 = base64.b64encode(img.read()) beauty = get_beauty(img_base64) name = file.split('.')[0] if beauty != '識別失敗': dit = { '主播': name, '顏值': beauty, } lis.append(dit) lis.sort(key=lambda x:x['顏值'], reverse=True) num = 1 for li in lis: print(f'顏值排名第{num}的是: {li["主播"]}, 顏值評分是{li["顏值"]}') num += 1
我弄的前十的排名數據,你們的可以自己修改哦~
讓我們來看一看前十小姐姐的顏值吧~
系統檢測顏值前十
咋到後面成這樣了!!!! 懷疑人生。。。。
終究是我跟不上時代了~
我不信這個邪,我要繼續,啊啊啊啊啊
終於有一個小姐姐不錯的了,嗚嗚嗚,太難了~
我喜歡的小姐姐
前面出現過的我這裡不會出現哦~(即使我認為好看,嘿嘿嘿)
還有一些我就不發出來了~你們自己去看叭
尾語
人的一生就像在攀登高峰,勤奮是你踏實穩健的雙腳,
信念是你指引前行的嚮導,勇敢是你孜孜追尋的恆心。
開心日到了,願你站穩雙腳,確定方向,向著你的理想巔峰勇敢前行,
不用怕,未來就在你的腳下。
—— 心靈雞湯
本文章到這裡就結束啦~希望這篇文章你喜歡,歡迎大家評論區討論哦