Python获取虎牙平台主播照片, 实现颜值检测, 进行排名

立山  金牌会员 | 2022-9-16 17:18:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 923|帖子 923|积分 2769

前言

嗨喽~大家好呀,这里是魔王呐 !
在这平凡的一日,我决定~
干一件平凡的事~让我们开动起我们的小手
 
 
来做一个小小的颜值检测叭~
 
 
开发环境:


  • 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、保存数据, 照片图片保存本地
代码

导入模块
  1. # 导入数据请求模块  --> 第三方模块 需要 在cmd里面 pip install requests
  2. import requests
  3. # 导入格式化输出模块 ---> 内置模块 不需要安装
  4. from pprint import pprint
  5. import base64
  6. import os
  7. from tqdm import tqdm
复制代码
 
采集图片
  1. """
  2. 1. 发送请求, 模拟浏览器对于url地址发送请求
  3.     - 当你请求url地址, 是长链接的时候, 我们是可以分段写
  4.         https://www..com/cache.php?
  5.         m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page=2
  6.      - 如何实现批量替换
  7.         选中替换的内容, 输入 ctrl + r 输入正则命令
  8.         (.*?): (.*)
  9.         '$1': '$2',
  10.     - 模拟伪装浏览器 ---> 请求头参数 可以直接在开发者工具里面进行复制
  11.     - 加文章下方老师VX
  12.         1. 领取python常用单词词汇汇总
  13.         2. 领取一个插件 翻译插件
  14.     - 等号左边都是属于自定义变量, 你自己定义变量
  15.         - 不能以数字开头
  16.         - 不推荐使用关键字命名
  17.         - 最好是见明知意
  18. """
  19. # 确定请求url地址
  20. url = 'https://www..com/cache.php'
  21. # 请求参数 ---> 字典数据类型, 构建完整键值对形式
  22. data = {
  23.     'm': 'LiveList',
  24.     'do': 'getLiveListByPage',
  25.     'gameId': '2168',
  26.     'tagAll': '0',
  27.     # 'callback': 'getLiveListJsonpCallback',
  28.     'page': '2',
  29. }
  30. # 模拟浏览器 ---> 请求头
  31. headers = {
  32.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
  33. }
  34. # 发送请求 --->  <Response [200]> 响应对象 200状态码表示请求成功
  35. response = requests.get(url=url, params=data, headers=headers)
  36. """
  37. 2. 获取数据, 获取服务器返回响应数据
  38.     response.text 获取文本数据 ---> 字符串数据类型
  39.     为了更加方便提取数据, 可以获取json字典数据
  40.         如果你想要获取json数据, 但是请求参数里面有 callback 可以删除 callback
  41.     response.json() 获取json数据 ---> 字典数据类型
  42. 3. 解析数据, 提取我们想要数据内容
  43.     - 当你的数据是字典数据, 可以使用pprint模块 进行格式化输出打印, 效果更好
  44.         如果你print打印字典数据, 呈现一行
  45.         如果你pprint打印字典数据, 呈现多行, 展开的效果 更加方便取值
  46.     - 字典取值 ---> 键值对取值, 根据冒号左边的内容[键], 提取冒号右边的内容[值]
  47. """
  48. # for循环遍历 一个一个提取列表里面元素
  49. for index in response.json()['data']['datas']:
  50.     # 获取名字
  51.     name = index['nick']
  52.     # 获取图片url
  53.     img_url = index['screenshot'].split('?')[0]
  54.     """
  55.     4. 保存数据 ---> 对于图片url地址发送请求, 获取数据
  56.         - FileNotFoundError: [Errno 2] No such file or directory: 'img知恩丶小晴天.jpg'
  57.             没有文件夹 ---> 1. 手动创建  2. 自动创建
  58.     """
  59.     # 获取图片二进制数据
  60.     img_content = requests.get(url=img_url, headers=headers).content
  61.     # 保存数据内容
  62.     with open('img' + name + '.jpg', mode='wb') as f:
  63.         # 写入数据
  64.         f.write(img_content)
  65.     print(name, img_url)
复制代码
 
 
 
颜值检测
  1. def get_beauty(img_base64):
  2.     # client_id 为官网获取的AK, client_secret 为官网获取的SK
  3.     host = 'https://aip.baidubce.com/oauth/2.0/token'
  4.     # 【官网获取的AK】 和 【官网获取的SK】 在百度云创建好应用之后, 就有的
  5.     params = {
  6.         'grant_type': 'client_credentials',
  7.         'client_id': 'quXbPEiGM2bKK77NV2vwsd53',
  8.         'client_secret': 'hRa4ox5WYLgU1cCm5bP2kU0GWnOqos76',
  9.     }
  10.     response = requests.get(url=host, params=params)
  11.     # 获取 access_token 值
  12.     access_token = response.json()['access_token']
  13.     request_url = f"https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={access_token}"
  14.     data = {
  15.         # 传入图片 base64内容
  16.         "image": img_base64,
  17.         "image_type": "BASE64",
  18.         "face_field": "beauty"
  19.     }
  20.     headers = {'content-type': 'application/json'}
  21.     json_data = requests.post(request_url, data=data, headers=headers).json()
  22.     try:
  23.         beauty = json_data['result']['face_list'][0]['beauty']
  24.         return beauty
  25.     except:
  26.         return '识别失败'
  27. # img_file = open('img\\悦欣-玻璃.jpg', mode='rb')
  28. # img_base64 = base64.b64encode(img_file.read())
  29. # beauty = get_beauty(img_base64)
  30. # print(f'颜值评分是:', beauty)
  31. lis = []
  32. files = os.listdir('img\\')
  33. print('正在颜值检测中, 请稍后.......')
  34. for file in tqdm(files[:10]):
  35.     img_file = 'img\\' + file
  36.     img = open(img_file, mode='rb')
  37.     img_base64 = base64.b64encode(img.read())
  38.     beauty = get_beauty(img_base64)
  39.     name = file.split('.')[0]
  40.     if beauty != '识别失败':
  41.         dit = {
  42.             '主播': name,
  43.             '颜值': beauty,
  44.         }
  45.         lis.append(dit)
  46. lis.sort(key=lambda x:x['颜值'], reverse=True)
  47. num = 1
  48. for li in lis:
  49.     print(f'颜值排名第{num}的是: {li["主播"]}, 颜值评分是{li["颜值"]}')
  50.     num += 1
复制代码
 
我弄的前十的排名数据,你们的可以自己修改哦~
 
 
让我们来看一看前十小姐姐的颜值吧~
系统检测颜值前十

 
 
 
 
 
 
 
 
咋到后面成这样了!!!! 怀疑人生。。。。
终究是我跟不上时代了~
 
 
我不信这个邪,我要继续,啊啊啊啊啊

 
 
 
 
终于有一个小姐姐不错的了,呜呜呜,太难了~
 
 
 
 
我喜欢的小姐姐

前面出现过的我这里不会出现哦~(即使我认为好看,嘿嘿嘿)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
还有一些我就不发出来了~你们自己去看叭
尾语

人的一生就像在攀登高峰,勤奋是你踏实稳健的双脚,
信念是你指引前行的向导,勇敢是你孜孜追寻的恒心。
开心日到了,愿你站稳双脚,确定方向,向着你的理想巅峰勇敢前行,
不用怕,未来就在你的脚下。
—— 心灵鸡汤

本文章到这里就结束啦~希望这篇文章你喜欢,欢迎大家评论区讨论哦
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表