使用python抓取婚恋网用户数据并用决策树生成自己择偶观
最近在看《机器学习实战》的时候萌生了一个想法,自己去网上爬一些数据按照书上的方法处理一下,不仅可以加深自己对书本的理解,顺便还可以在github拉拉人气。刚好在看决策树这一章,书里面的理论和例子让我觉得这个理论和选择对象简直不能再贴切,看完长相看学历,看完学历看收入。如果可以从婚恋网站上爬取女性的数据信息,手动给她们打标签,并根据这些数据构建决策树,不就可以找出自己的择偶模式了吗!github项目:huatian-funny,下面就详细的阐释一下。
数据爬取
之前在世纪佳缘上爬取过类似的数据,总体的感觉是上面的用户数据要么基本不填要么一看就很假,周围的一些老司机建议可以在花田网上看下,数据质量确实高很多,唯一的缺点就是上面的数据不给爬,搜索用户的API需要登录,而且只显示三十多个用户的信息。刚好我需要的数据也很少,就把搜索条件划分的很细,每次取到的数据很小,但最终汇集的数量还是相当可观的,最终获取了位置在上海年龄22-27共计2000个左右的用户数据。填写好spider.py中的用户名和密码,直接运行这个文件就可以爬取数据,因为数据量不大,很快就可以运行完毕,存储在mongodb中的数据如下:
爬虫用到的工具是requests,流程上也很简单,先发送登陆请求获取cookie,然后调用搜索API获取数据,拿到的数据是json格式,不需要任何转换直接存储mongodb,非常的方便,唯一想吐槽的就是花田搜索API接口竟然用的是POST方式,太没有专业水准了。稍微提一下如何用request获取cookie,用Session构建一个session对象,用这个对象发送登陆请求后,之后的请求都会自动带上登陆返回的cookie,使用起来非常的简单。
from requests import Session session = Session()
session.post(login_url, data=post_data, headers=POST_HEADERS)
response = session.get(search_url, headers=GET_HEADERS)
给用户打标签
由于决策树属于监督学习,需要一个给定的标签,因此需要自己根据用户的外貌、年龄、学历等多个维度的判断给出一个标签,最后生成的决策树在一定程度上就可以反映自己的择偶标准。针对女性的标签很简单粗暴,只有满意和不满意两种,有兴趣的同学可以按照真实的情况设置更多的标签,例如优秀、一般、备胎、不合格等等。因为外貌是选择对象过程中一个必不可少的要素,把相貌量化至关重要,因为没有相关的工具根据头像进行评分,只能个人主观进行量化,采用了当下非常流行的十分制。
为了增加打标签的效率,专门写了一个桌面窗口,运行mark.py即可,运行结果如下。(tkinter是一个坑,调代码的时间够我把整个数据集看好几遍了,不过真的用起来的时候还是挺有意思的)
备注:因为刚开始看的很多用户只有头像、年龄、身高、工资、学历这五个信息,所以整个过程中只参考了这五个维度进行评价,下面的决策树也是根据这五个维度进行处理。
训练数据
决策树
机器学习中,决策树是一个预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。从数据产生决策树的机器学习技术叫做决策树学习, 通俗点说就是决策树,说白了,这是一种依托于分类、训练上的预测树,根据已知预测、归类未来。
理论方面我可以参考《机器学习实战》第三章或者这篇博客,很浅显易懂的解释了具体的原理,我就不赘述了。
结果展示
代码参考的是《机器学习实战》,针对现实自己做了一些优化调整,和原来的代码不是完全相同,运行train.py就可以显示出结果,如下:
因为线很挤,调了很久只能拿到这个效果了。到这儿已经很清晰明了的阐明了主题,我就是一个外貌党,颜值高的pass,颜值低的忽略,不高不低的考虑的相当纠结。有兴趣的同学可以自己试一试。
PS1:其实不太想承认自己是一个外貌协会成员,人丑颜控注定孤独一生。
PS2:因为打标签的过程有些随意,所以有一部分不准确。
PS3:没有相亲的打算,不约。
使用python抓取婚恋网用户数据并用决策树生成自己择偶观的更多相关文章
- 使用 Python 抓取欧洲足球联赛数据
Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 ...
- java网络爬虫----------简单抓取慕课网首页数据
© 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...
- [Python] 抓取时光网的电影列表并生成网页
抓取时光网的电影列表并生成网页 源码 https://github.com/YouXianMing/BeautifulSoup4-WebCralwer 分析 利用BeautifulSoup进行分析网页 ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- Python抓取第一网贷中国网贷理财每日收益率指数
链接:http://www.p2p001.com/licai/index/id/147.html 所需获取数据链接类似于:http://www.p2p001.com/licai/shownews/id ...
- Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...
- Python抓取国家医疗费用数据:国家名、人均开销
前言 整个世界正被大流行困扰着,不同国家拿出了不同的应对策略,也取得了不同效果.这也是本文的脑洞来源,打算研究一下各国在医疗基础设置上的开支,对几个国家的医疗费用进行数据可视化. 由于没有找到最近一年 ...
- Python抓取新浪新闻数据(二)
以下是抓取的完整代码(抓取了网页的title,newssource,dt,article,editor,comments)举例: 转载于:https://blog.51cto.com/2290153/ ...
- python抓取电影<海王>影评词云生成
海王是前段时间大热的影片,个人对这种动漫题材的电影并不是很感兴趣.然鹅,最近这部电影实在太热了,正好最近看自然语言处理的时候,无意间发现了word cloud这个生成词云的库,还蛮好玩的,那就抓抓这部 ...
随机推荐
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题
用get方法查询: return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...
- SDWebImage源码解读 之 SDWebImageCompat
第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...
- PHP之用户验证和标签推荐的简单使用
本篇主要是讲解一些最简单的验证知识 效果图 bookmark_fns.php <?php require_once('output_fns.php'); require_once('db_fns ...
- 后缀数组的倍增算法(Prefix Doubling)
后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
- springmvc SSM shiro redis 后台框架 多数据源 代码生成器
A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单 下载地址 ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类 ...
- JavaScript求两个数字之间所有数字的和
这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...
- 腾讯云 安装mono
一.yum -y update 运行出现以下错误: http://centos.tencentyun.com/contrib/x86_64/repodata/filelists.xml.gz: [Er ...
- 如何在高并发分布式系统中生成全局唯一Id
月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1. ...