前言

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

作者: 罗罗攀

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

一见钟情钟的不是情,是脸

日久生情生的不是脸,是情

项目简介

本项目利用Python爬虫和百度人脸识别API,针对简书交友专栏,爬取用户照片(侵删),并进行打分。 本项目包括以下内容:

  • 图片爬虫
  • 人脸识别API使用
  • 颜值打分并进行文件归类

图片爬虫

现在各大交友网站都会有一些用户会爆照,本文爬取简书交友专栏的所有帖子,并进入详细页,获取所有图片并下载到本地。

代码

  1. import requests
  2. from lxml import etree
  3. import time

  4. headers = {
  5. 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  6. }

  7. def get_url(url):
  8. res = requests.get(url,headers=headers)
  9. html = etree.HTML(res.text)
  10. infos = html.xpath('//ul[@class="note-list"]/li')
  11. for info in infos:
  12. root = 'https://www.jianshu.com'
  13. def get_img(url):
  14. res = requests.get(url, headers=headers)
  15. html = etree.HTML(res.text)
  16. title = html.xpath('//div[@class="article"]/h1/text()')[0].strip('|').split(',')[0]
  17. name = html.xpath('//div[@class="author"]/div/span/a/text()')[0].strip('|')
  18. infos = html.xpath('//div[@class = "image-package"]')
  19. i = 1
  20. for info in infos:
  21. try:
  22. img_url = info.xpath('div[1]/div[2]/img/@data-original-src')[0]
  23. print(img_url)
  24. data = requests.get('http:' + img_url,headers=headers)
  25. try:
  26. fp = open('row_img/' + title + '+' + name + '+' + str(i) + '.jpg','wb')
  27. fp.write(data.content)
  28. fp.close()
  29. except OSError:
  30. fp = open('row_img/' + name + '+' + str(i) + '.jpg', 'wb')
  31. fp.write(data.content)
  32. fp.close()
  33. except IndexError:
  34. pass
  35. i = i + 1

  36. if __name__ == '__main__':
  37. urls = ['https://www.jianshu.com/c/bd38bd199ec6?order_by=added_at&page={}'.format(str(i)) for i in range(1,201)]
  38. for url in urls:
  39. get_url(url)

人脸识别API使用

由于爬取了帖子下面的所有图片,里面有各种图片(不包括人脸),而且是为了找到高颜值小姐姐,如果人工筛选费事费力,这里调用百度的人脸识别API,进行图片过滤和颜值打分。

人脸识别应用申请

首先,进入百度人脸识别官网,点击立即使用,登陆百度账号(没有就注册一个)。

创建应用,完成后,点击管理应用,就能看到AppID等,这些在调用API时需要使用的。

API调用

这里使用杨超越的图片先试下水。通过结果,可以看到75分,还算比较高了(自己用了一些网红和明星测试了下,分数平均在80左右,最高也没有90以上的)。

  1. from aip import AipFace
  2. import base64
  3. APP_ID = ''
  4. API_KEY = ''
  5. SECRET_KEY = ''
  6. aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)
  7. filePath = r'C:\Users\LP\Desktop\6.jpg'
  8. def get_file_content(filePath):
  9. with open(filePath, 'rb') as fp:
  10. content = base64.b64encode(fp.read())
  11. return content.decode('utf-8')
  12. imageType = "BASE64"
  13. options = {}
  14. options["face_field"] = "age,gender,beauty"
  15. result = aipFace.detect(get_file_content(filePath),imageType,options)
  16. print(result)

颜值打分并进行文件归类

最后结合图片数据和颜值打分,设计代码,过滤掉非人物以及男性图片,获取小姐姐图片的分数(这里处理为1-10分),并分别存在不同的文件夹中。

  1. from aip import AipFace
  2. import base64
  3. import os
  4. import time
  5. APP_ID = ''
  6. API_KEY = ''
  7. SECRET_KEY = ''
  8. aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)
  9. def get_file_content(filePath):
  10. with open(filePath, 'rb') as fp:
  11. content = base64.b64encode(fp.read())
  12. return content.decode('utf-8')
  13. imageType = "BASE64"
  14. options = {}
  15. options["face_field"] = "age,gender,beauty"
  16. file_path = 'row_img'
  17. file_lists = os.listdir(file_path)
  18. for file_list in file_lists:
  19. result = aipFace.detect(get_file_content(os.path.join(file_path,file_list)),imageType,options)
  20. error_code = result['error_code']
  21. if error_code == 222202:
  22. continue
  23. try:
  24. sex_type = result['result']['face_list'][-1]['gender']['type']
  25. if sex_type == 'male':
  26. continue
  27. # print(result)
  28. beauty = result['result']['face_list'][-1]['beauty']
  29. new_beauty = round(beauty/10,1)
  30. print(file_list,new_beauty)
  31. if new_beauty >= 8:
  32. os.rename(os.path.join(file_path,file_list),os.path.join('8分',str(new_beauty) + '+' + file_list))
  33. elif new_beauty >= 7:
  34. os.rename(os.path.join(file_path,file_list),os.path.join('7分',str(new_beauty) + '+' + file_list))
  35. elif new_beauty >= 6:
  36. os.rename(os.path.join(file_path,file_list),os.path.join('6分',str(new_beauty) + '+' + file_list))
  37. elif new_beauty >= 5:
  38. os.rename(os.path.join(file_path,file_list),os.path.join('5分',str(new_beauty) + '+' + file_list))
  39. else:
  40. os.rename(os.path.join(file_path,file_list),os.path.join('其他分',str(new_beauty) + '+' + file_list))
  41. time.sleep(1)
  42. except KeyError:
  43. pass
  44. except TypeError:
  45. pass

最后结果8分以上的小姐姐很少,如图(侵删)。

讨论

  • 简书交友小姐姐数量较少,读者可以去试试微博网红或知乎美女。
  • 虽然这是一个看脸的时代,但喜欢一个人,始于颜值,陷于才华,忠于人品(最后正能量一波,免得被封)。

5000+图片找到你喜欢的那个TA,Python爬虫+颜值打分的更多相关文章

  1. Python爬虫+颜值打分,5000+图片找到你的Mrs. Right

        一见钟情钟的不是情,是脸 日久生情生的不是脸,是情 项目简介 本项目利用Python爬虫和百度人脸识别API,针对简书交友专栏,爬取用户照片(侵删),并进行打分. 本项目包括以下内容: 图片爬 ...

  2. 小白如何入门 Python 爬虫?

    本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫! 想要入门Python 爬虫首先需要解决四个问题 熟悉python编程 了解HTML 了解网络爬虫的基本原理 学习使用python爬虫 ...

  3. [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈

    我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:        1.可以了解Python简单爬取图片的一些思路和方法 ...

  4. python爬虫——《英雄联盟》英雄及皮肤图片

    还记得那些年一起网吧开黑通宵的日子吗?<英雄联盟>绝对是大学时期的风靡游戏,即使毕业多年的大学同学相聚,难免不怀念一番当时一起玩<英雄联盟>的日子. 今天就给大家分享一下英雄及 ...

  5. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  6. [python爬虫] Selenium定向爬取虎扑篮球海量精美图片

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  7. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  8. python 爬虫入门----案例爬取上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. ...

  9. 如何用Python爬虫实现百度图片自动下载?

    Github:https://github.com/nnngu/LearningNotes 制作爬虫的步骤 制作一个爬虫一般分以下几个步骤: 分析需求 分析网页源代码,配合开发者工具 编写正则表达式或 ...

随机推荐

  1. 设计模式—建造者模式(Builder)

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  2. [模板] dfs序

    B.树之呼吸-贰之型-dfs序 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 42 (16 users) Total Accepted ...

  3. [Redis] 万字长文带你总结Redis,助你面试升级打怪

    文章目录 Redis的介绍.优缺点.使用场景 Linux中的安装 常用命令 Redis各个数据类型及其使用场景 Redis字符串(String) Redis哈希(Hash) Redis列表(List) ...

  4. mysqlbinlog错误:Error in Log_event::read_log_event(): 'read error'

    环境: mysql 5.6 ; binlog  3.4 ; binlog_format MIXED ; .报错: mysqlbinlog -v --start-position=166084123 m ...

  5. 深度学习、物联网专家Sunil Kumar Vuppala博士独家专访

    介绍 有多种方法可以学习数据科学,机器学习和深度学习概念.您可以观看视频,阅读文章,参加课程,参加会议等.但是有一件事是无法替代的----经验. 我个人从与数据科学专家和行业领袖的交流中学到了很多.他 ...

  6. Springboot 事务注解--- @Transactional

    spring boot @Transactional事物处理    spring boot 添加事物使用 @Transactional注解 简单使用 在启动类上方添加 @EnableTransacti ...

  7. Unable to locate JAR/zip in file system as specified by the driver definitio

    把之前的驱动包删掉,然后把你的驱动包导入就行了 现在OK键就算正常了

  8. LeetCode47, 全排列进阶,如果有重复元素怎么办?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题. 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回 ...

  9. springboot项目启动-自动创建数据表

    很多时候,我们部署一个项目的时候,需要创建大量的数据表.例如mysql,一般的方法就是通过source命令完成数据表的移植,如:source /root/test.sql.如果我们需要一个项目启动后, ...

  10. 1047: 【入门】正整数N转换成一个二进制数

    1047: [入门]正整数N转换成一个二进制数 时间限制: 1 Sec 内存限制: 16 MB 提交: 9786 解决: 6447 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 输入 ...