Python 之 爬虫实战 -- 收集某牙直播平台舞蹈区颜值排行榜(人脸检测+爬虫)
一大波高颜值主播来袭:快看,某牙颜值排名,为了这个排名我可是大费周章啦!不亏是你...(人脸检测+爬虫)
本次文章主要内容为:
一. 采集主播照片 二. 对于照片进行人脸识别检测, 进行打分 三. 评分排名。
环境准备
1)运行环境
开发环境:Python3、Pycharm社区版、requests、tqdm、部分自带的模块
安装Python即可使用。
2)模块安装
第三方库的安装方式如下:
一般安装:pip install +模块名
镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名
(还有很多国内镜像源 这里是豆瓣的 用习惯了。其他的镜像源可以去看下之
前的文章都有的)
爬虫的基本思路
1)数据来源分析
- 明确需求: 采集的网站是那个?采集的数据是那个? 主播照片/主播昵称。
- 分析:主播照片/主播昵称 在什么地方可以获得。
通过开发者工具<浏览器自带工具>进行抓包<数据包>分析
打开开发者工具: F12 / 鼠标右键点击检查选择network
1》定位找到单张图片url地址 。
2》通过图片url地址中, 一段参数, 去搜索查询所对应数据包 - 点击第二页 -->
XHR --> 第一个数据包, 通过搜索抓包分析得到的数据包:
代码实现步骤
- 发送请求, 模拟浏览器对于url地址发送请求 。
请求链接: https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&callback=getLiveListJsonpCallback&page=2
2. 获取数据, 获取服务器返回响应数据 开发者工具: response 。
-
解析数据, 提取我们想要的数据内容 照片url / 昵称 。
-
保存数据, 把图片数据保存本地文件夹。
代码实现
"""
# 导入数据请求模块 --> 第三方模块, 需要安装 pip install requests
import requests
import base64
import os
import time
from tqdm import tqdm
def score(file):
"""
定义函数
:param file: 文件路径
:return:
"""
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'
}
# 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, headers=headers)
access_token = response.json()['access_token']
# 读取一张图片数据
img_content = open(file, mode='rb').read()
base_data = base64.b64encode(img_content)
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
params = {
# 图片数据
"image": base_data,
"image_type": "BASE64",
"face_field": "beauty"
}
request_url = request_url + "?access_token=" + access_token
headers_1 = {'content-type': 'application/json'}
json_data = requests.post(request_url, data=params, headers=headers_1).json()
try:
num = json_data['result']['face_list'][0]['beauty']
return num
except:
return '识别失败'
info_list = []
# 对于所有照片进行颜值检测 --> 获取文件路径/文件名字
files = os.listdir('img\\')
print('正在做颜值评分, 请稍后.....')
for file in tqdm(files):
# 延时请求慢点
time.sleep(0.5)
# 完整的路径
filename = 'img\\' + file
# 切片
name = file[:-4]
result = score(file=filename)
if result != '识别失败':
dit = {
'主播': name,
'颜值': result
}
# 列表添加元素
info_list.append(dit)
info_list.sort(key=lambda x:x['颜值'], reverse=True)
i = 1
for info in info_list:
print(f'颜值排名第{i}的是{info["主播"]}, 颜值评分是{info["颜值"]}')
i += 1
# """
# 1. 发送请求, 模拟浏览器对于url地址发送请求
# 伪装模拟 --> headers 请求头
# 字典数据类型, 要构建完整键值对
# <Response [200]> 响应对象, 表示请求成功
# """
# # 请求链接
# url = 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&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 = requests.get(url=url, headers=headers)
# """
# 2. 获取数据, 获取服务器返回响应数据
# 开发者工具: response
# - requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
# 原因: 获取数据不是完整json数据格式
# 解决:
# 1. 获取文本数据, 查看数据返回效果
# 2.
# - 通过正则表达式提取数据
# - 删掉 请求链接 里面参数 Callback
#
# 3. 解析数据, 提取我们想要的数据内容
# 照片url / 昵称
# response.json() --> 字典数据类型
# 根据键值对取值 --> 根据冒号左边的内容[键], 提取冒号右边的内容[值]
# """
# # for循环遍历, 一个一个提取列表里面元素
# for index in response.json()['data']['datas']:
# # 提取照片
# img_url = index['screenshot']
# # 提取昵称
# name = index['nick']
# print(name, img_url)
# """
# 4. 保存数据 --> 需要对图片链接发送请求, 获取二进制<图片>数据
# 'img\\'<文件夹> + name<文件名> + '.jpg'<文件格式>, mode='wb'<二进制保存>
# """
# # 获取图片二进制数据
# img_content = requests.get(url=img_url, headers=headers).content
# # 保存数据
# with open('img\\' + name + '.jpg', mode='wb') as f:
# f.write(img_content)
效果展示
1)数据下载
2)保存数据
3)人脸检测
图片数据下载之后进行人脸检测排名,第一步调用api接口。
登录百度云账号——控制台——人脸识别。
下一步创建应用。
下一步实名免费领取,具体怎么使用可以去技术文档查看即可,不会的可以找我拿视频教程一
步一步来哈。
4)颜值排名
5)排名前三主播
END
原文公众号:Python顾木子吖
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人