前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 星安果、AirPython

目 标 场 景

相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯。

如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜值高的小姐姐那就省了很多事。

本篇文章是借助「百度人脸识别」API,帮我们识别出抖音上颜值高的小姐姐,然后下载到手机相册中。

准 备 工 作

首先,项目需要对页面元素进行一些精准的操作,需要提前准备一部 Android 设备,激活开发者选项,并在开发者选项中打开 「USB 调试和指针位置」两处设置。

为了确保 adb 命令能正常使用,需要提前配置好 adb 开发环境。

页面元素中的部分元素没法利用 name 等常用属性获取到,可能需要获取到完整的「UI 树」,再利用 Airtest 判断是否存在某个 UI 元素。

# 安装依赖
pip3 install pocoui

另外,项目中会对视频进行人脸识别,获取到出现的所有人脸,再进行性别识别及颜值判断。

这里需要进行百度云后台,注册一个人脸识别的应用,获取到一组 「API Key 和 Secret Key」值。

然后利用官网提供的 API 文档即可获取到「access token」,由于 ak 的有效期为一个月,所以只需要初始化一次,后面就可以利用人脸识别接口进行正常的识别了。

appid = '你注册应用的appid'
api_key = '你注册应用的ak'
secret_key = '你注册应用的sk'
​
def get_access_token():"""其关access_token有效期一般有一个月"""# 此变量赋值成自己API Key的值client_id = api_key
​# 此变量赋值成自己Secret Key的值client_secret = secret_key
​auth_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
​header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',"Content-Type": "application/json"}
​# 请求获取到token的接口response_at = requests.get(auth_url, headers=header_dict)json_result = json.loads(response_at.text)access_token = json_result['access_token']return access_token

编 写 脚 本

在上面已经配置好了 adb 环境的情况下,可以直接借助 python 中的 os 模块执行 adb 命令打开抖音 App。

# 抖音App的应用包名和初始Activity
package_name = 'com.ss.android.ugc.aweme'
activity_name = 'com.ss.android.ugc.aweme.splash.SplashActivity'
​
def start_my_app(package_name, activity_name):"""打开应用adb shell am start -n com.tencent.mm/.ui.LauncherUI:param package_name::return:"""os.popen('adb shell am start -n %s/%s' % (package_name, activity_name))

接着,我们需要截取当前播放视频的截图到本地。 需要注意的是,抖音视频播放界面包含视频创作者头像、BGM 创作者头像等一些杂乱的元素,可能对人脸识别的结果产生一些误差,所以需要对屏幕截图之后的图像进行「二次裁剪」处理。

def get_screen_shot_part_img(image_name):"""获取手机截图的部分内容:return:"""# 截图os.system("adb shell /system/bin/screencap -p /sdcard/screenshot.jpg")os.system("adb pull /sdcard/screenshot.jpg %s" % image_name)
​# 打开图片img = Image.open(image_name).convert('RGB')
​# 图片的原宽、高(1080*2160)w, h = img.size
​# 截取部分,去掉其头像、其他内容杂乱元素img = img.crop((0, 0, 900, 1500))
​img.thumbnail((int(w / 1.5), int(h / 1.5)))
​# 保存到本地img.save(image_name)
​return image_name

现在可以使用百度提供的 API 获取到上面截图的人脸列表。

def parse_face_pic(pic_url, pic_type, access_token):"""人脸识别5秒之内:param pic_url::param pic_type::param access_token::return:"""url_fi = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + access_token
​# 调用identify_faces,获取人脸列表json_faces = identify_faces(pic_url, pic_type, url_fi)
​if not json_faces:print('未识别到人脸')return Noneelse:# 返回所有的人脸return json_faces

从上述的人脸列表中筛选出性别为女,年龄为 18-30 岁之间,颜值超过 70 的小姐姐。

def analysis_face(face_list):"""分析人脸,判断颜值是否达标18-30之间,女,颜值大于80:param face_list:识别的脸的列表:return:"""# 是否能找到高颜值的美女find_belle = Falseif face_list:print('一共识别到%d张人脸,下面开始识别是否有美女~' % len(face_list))for face in face_list:# 判断是男、女if face['gender']['type'] == 'female':age = face['age']beauty = face['beauty']
​if 18 <= age <= 30 and beauty >= 70:print('颜值为:%d,及格,满足条件!' % beauty)find_belle = Truebreakelse:print('颜值为:%d,不及格,继续~' % beauty)continueelse:print('性别为男,继续~')continueelse:print('图片中没有发现人脸.')
​return find_belle

由于视频是连续播放的,很难通过截取视频某一帧,判断视频有出现颜值高的小姐姐。

另外,大部分短视频播放时长为「10s+」,这里需要对每一个视频多次截图去做人脸识别,直到识别到颜值高的小姐姐。

# 一条视频最长的识别时间
RECOGNITE_TOTAL_TIME = 10
# 识别次数
recognite_count = 1
​
# 对当前视频截图去人脸识别
while True:# 获取截图print('开始第%d次截图' % recognite_count)
​# 截取屏幕有用的区域,过滤视频作者的头像、BGM作者的头像screen_name = get_screen_shot_part_img('images/temp%d.jpg' % recognite_count)
​# 人脸识别recognite_result = analysis_face(parse_face_pic(screen_name, TYPE_IMAGE_LOCAL, access_token))
​recognite_count += 1
​# 第n次识别结束后的时间recognite_time_end = datetime.now()
​# 这一条视频出现了颜值高的小姐姐if recognite_result:passelse:print('超时!!!这是一条没有吸引力的视频!')# 跳出里层循环break

获取「分享」和「保存本地」两个按钮的坐标位置,依次利用 adb 执行点击操作即可下载视频到本地。

def save_video_met():""":return:"""# 分享os.system("adb shell input tap 1000 1500")time.sleep(0.05)
​# 保存到本地os.system("adb shell input tap 350 1700")

另外,由于下载视频的过程是一个耗时操作,在下载进度对话框还未消失之前,需要做一个「模拟等待」的操作。

def wait_for_download_finished(poco):"""从点击下载,到下载完全:return:"""element = Element()while True:# 由于是对话框,不能利用Element类来判断是否存在某个元素来准确处理# element_result = element.findElementByName('正在保存到本地')# 当前页面UI树元素信息# 注意:保存的时候可能会获取元素异常,这里需要抛出,并终止循环# com.netease.open.libpoco.sdk.exceptions.NodeHasBeenRemovedException: Node was no longer alive when query attribute "visible". Please re-select.try:ui_tree_content = json.dumps(poco.agent.hierarchy.dump(), indent=4).encode('utf-8').decode('unicode_escape')except Exception as e:print(e)print('异常,按下载处理~')breakif '正在保存到本地' in ui_tree_content:print('还在下载中~')time.sleep(0.5)continueelse:print('下载完成~')break

在视频保存到本地之后,就可以模拟向上滑动的操作,跳到播放「下一条视频」。 循环上面的操作,即可筛选出所有颜值高的小姐姐,并保存到本地。

def play_next_video():"""下一个视频从下往上滑动:return:"""os.system("adb shell input swipe 540 1300 540 500 100")

在脚本一条条刷视频的过程中,可能会遇到一下广告,我们需要对这类视频进行过滤。

def is_a_ad():"""判断的当前页面上是否是一条广告:return:"""element = Element()ad_tips = ['去玩一下', '去体验', '立即下载']
​find_result = False
​for ad_tip in ad_tips:try:element_result = element.findElementByName(ad_tip)# 是一条广告,直接跳出find_result = Truebreakexcept Exception as e:find_result = False
​return find_resul
#在学习Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去了,因此我特意准备了个群 592539176 ,群里有大量的PDF书籍、教程都给大家免费使用!不管是学习到哪个阶段的小伙伴都可以获取到自己相对应的资料!

结 果 结 论

运行上面的脚本,会自动打开抖音,对每一条小视频多次进行人脸识别,直到识别到颜值高的小姐姐,保存视频到本地,然后继续刷下一条短视频。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

抖音那么大我想看美女,python一键爬取高颜值小姐姐相关推荐

  1. Python爬虫 | 爬取高质量小姐姐照片

    Python爬虫 | 爬取高质量小姐姐照片 1.数据来源分析 2.获取author_id_list和img_id 3.制作detial 4.制作detial_list 5.数据保存 6.批量获取 7. ...

  2. python实战|爬取1000位小姐姐私房照制作照片墙,刷新你三观的颜值!

    今天给大家介绍python如何爬取虎牙小姐姐并制作心形照片墙, 有兴趣的小伙伴们一起来看看吧! 点击进去 卧槽,这颜值..... i了i了 需求分析 我们的目标有5个,分别是小姐姐的 房间名称.封面照 ...

  3. python 知乎美女_知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测)

    原标题:知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测) 1 数据源 知乎话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.l ...

  4. 用python爬小说_今天分享一个用Python来爬取小说的小脚本!(附源码)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  5. python爬取天气预报数据并保存为txt格式_今天分享一个用Python来爬取小说的小脚本!(附源码)...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  6. 【Python】多线程爬取某站高颜值小姐姐照片(共1.62GB)

    文章目录 写在前面 目标网站 依赖模块 爬虫思路 完整代码 爬虫结果 单图预览 多图预览 引用参考 写在前面 本文使用Python编写爬虫脚本,实现多线程爬取唯美女生网站高颜值小姐姐的所有照片. 目标 ...

  7. python一键爬取视频_超详细Python-一键爬取图片、音频、视频资源

    使用Python爬取任意网页的资源文件,比如图片.音频.视频:一般常用的做法就是把网页的HTML请求下来通过XPath或者正则来获取自己想要的资源,这里我做了一个爬虫工具软件,可以一键爬取资源 媒体文 ...

  8. python爬取美女_Python爬取高颜值美女(爬虫+人脸检测+颜值检测)附学习教程

    1 数据源 知乎话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.lxml.AipFace,代码共 100 + 行 3 必要环境Mac / L ...

  9. 知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测)

    本文来源于:Python与人工智能社区 1 数据源 知乎话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.lxml.AipFace,代码共 1 ...

最新文章

  1. PowerDesigner与Rose详解教程
  2. 全球首个自适应机械臂:精准抗干扰,斯坦福华人团队打造
  3. 使用git克隆GitHub仓库时报错解决方案
  4. 外媒:谷歌攻击码由中国作者发布
  5. 用java写的常见排序
  6. 退居二线VS在深圳发展,一个十年IT人的选择之难
  7. 监督学习 | 决策树之Sklearn实现
  8. 大三下,第一次前端面试经历
  9. 别乱提交代码了,你必须知道的 Git 分支开发规范!
  10. PhantomJS其他语言调用
  11. ModbusTCP协议
  12. cad文件管理服务器,CAD文件管理(ZT)
  13. seaborn sns.regplot()
  14. 联想启天M439E BIOS升级为F1KT74AUS
  15. python处理cad_pyautocad python 操作CAD文件
  16. 记一次刷路由器固件的经历
  17. 手把手教你制作炫酷的PCB板3D效果图
  18. 宁波python培训班
  19. 【机器学习】线性回归(理论)
  20. 用计算机打元宵节快乐,元宵节快乐祝福短语

热门文章

  1. js中单引号和双引号
  2. .NET WebApi调用微信接口Https请求工具类
  3. 组织行为学对项目管理的意义(1)
  4. 加盟店铺管理门道多,国内十大加盟店管理软件来帮你!
  5. CA6140后托架(831001)加工工艺及夹具设计CAD图纸(论文 CAD图纸 开题报告 任务书 工艺卡 文献翻译)
  6. 动手学深度学习(tensorflow)---学习笔记整理(一、预备知识篇)
  7. 通过共享门店收款码系统,可快速获得门店现金流
  8. 港澳四晚五日游(购物团)游记
  9. 地铁无线cad服务器,地铁车站设计CAD图纸(完整)(dwg)
  10. java 验证码点击刷新_第三讲:验证码点击刷新