Python | 美女挖掘指南
信息安全公益宣传,信息安全知识启蒙。
加微信群回复公众号:微信群;QQ群:16004488
加微信群或QQ群可免费索取:学习教程
教程列表见微信公众号底部菜单
1、数据源
知乎 话题『美女』下所有问题中回答所出现的图片
2、抓取工具
Python 3,并使用第三方库 Requests、lxml、AipFace,代码共 100 + 行
3、必要环境
Mac / Linux / Windows (Linux 没测过,理论上可以。Windows 之前较多反应出现异常,后查是 windows 对本地文件名中的字符做了限制,已使用正则过滤),无需登录知乎(即无需提供知乎帐号密码),人脸检测服务需要一个百度云帐号(即百度网盘 / 贴吧帐号)
4、人脸检测库
AipFace,由百度云 AI 开放平台提供,是一个可以进行人脸检测的 Python SDK。可以直接通过 HTTP 访问,免费使用
5、检测过滤条件
过滤所有未出现人脸图片(比如风景图、未露脸身材照等)
过滤所有非女性(在抓取中,发现知乎男性图片基本是明星,故不考虑;存在 AipFace 性别识别不准的情况)
过滤所有非真实人物,比如动漫人物 (AipFace Human 置信度小于 0.6)
过滤所有颜值评分较低图片(AipFace beauty 属性小于 45,为了节省存储空间;再次声明,AipFace 评分无任何客观性)
6、实现逻辑
通过 Requests 发起 HTTP 请求,获取『美女』下的部分讨论列表
通过 lxml 解析抓取到的每个讨论中 HTML,获取其中所有的 img 标签相应的 src 属性
通过 Requests 发起 HTTP 请求,下载 src 属性指向图片(不考虑动图)
通过 AipFace 请求对图片进行人脸检测
判断是否检测到人脸,并使用 『4 检测过滤条件』过滤
将过滤后的图片持久化到本地文件系统,文件名为 颜值 + 作者 + 问题名 + 序号
返回第一步,继续
7、抓取结果
直接存放在文件夹中(angelababy 实力出境)。另外说句,目前抓下来的图片,除 baby 外,88 分是最高分。个人对其中的排序表示反对,老婆竟然不是最高分
8、代码
获取代码,请前往微信公众号后台回复关键字 爬虫美女 获取。
9、运行准备
安装 Python 3,Download Python
安装 requests、lxml、baidu-aip 库,都可以通过 pip 安装,一行命令
申请百度云检测服务,免费。人脸识别-百度AI
(可选)配置自定义信息,如图片存储目录、颜值阈值、人脸置信度等
(可选)若请求知乎失败,返回如下。需更改 AUTHORIZATION,可从开发者工具中获取(如下图)
{
"error": {
"message": "ZERR_NO_AUTH_TOKEN",
"code": 100,
"name": "AuthenticationInvalidRequest"
}
}
运行 ^*^
10、结语
因是人脸检测,所以可能有些福利会被筛掉。百度图像识别 API 还有一个叫做色情识别。这个 API 可以识别不可描述以及性感指数程度,可以用这个 API 来找福利(逃
如果实在不想申请百度云服务,可以直接把人脸检测部分注释掉,当做单纯的爬虫使用
人脸检测部分可以替换成其他厂商服务或者本地模型,这里用百度云是因为它不要钱
抓了几千张照片,效果还是挺不错的。有兴趣可以把代码贴下来跑跑试试
这边文章只是基础爬虫 + 数据过滤来获取较高质量数据的示例,希望有兴趣者可以 run 下,代码里有很多地方可以很容易的修改,从最简单的数据源话题变更、抓取数据字段增加和删除到图片过滤条件修改都很容易。如果再稍微花费时间,变更为抓取某人动态(比如轮子哥,数据质量很高)、探索 HTTP 请求中哪些 header 和 query 是必要的,文中代码都只需要非常局部性的修改。至于人脸探测,或者其他机器学习接口,可以提供非常多的功能用于数据过滤,但哪些过滤是具备高可靠性,可信赖的且具备可用性,这个大概是经验和反复试验,这就是额外的话题了;顺便希望大家有良好的编码习惯
最后再次声明,颜值得分以及性别过滤存在 bad case,请勿认真对待