【python】家里无矿的年轻人怎么筛选北京刚需房
1. 背景
郑老师最近又开始念叨着要北京买房,郑老师是个偏思想派的人,总是有着远大目标和理想的。
而我则是个偏现实派的,总是喜欢打击他,“郑老师,我们没钱啊,在北京买不起房的,其他地方还可以考虑考虑的。”
郑老师:“买不起近的,买个远点小点旧点的都行啊”。
郑老师已经念叨了好几次,但是,也没看他关注过北京房价啥的。
也是,郑老师每天不是忙着上课做直播催作业改作业录视频发公众号买菜做饭洗碗取快递倒垃圾……就是鼓励我,让我培养个兴趣爱好,前阵子还鼓励我画画(可惜,作为灵魂画手的我花了差不多花了半个月的时间,从拿起到放弃,依旧停留在简笔画上…),可不没时间么。
我这天天做的这些有的没的,就开始琢磨着怎么把这个想法推进一下,让郑老师别老念叨了。
2.需求
价格:年轻人最主要的特点就是:没钱,好听点就是还在资本积累阶段。所以,基本上也买不起贵的,只能从价格低档开始看了。
位置:但是,有一点是郑老师死活坚持的,就是交通便利,或者说是近地铁!远点都能接受。
上述两个需求算是死要求了。
关注和筛选:毕竟距离能买还有不少时间,这段时间每天花时间在网上点点看看,意义也不是很大,一来时间不允许,二来,心动的别人已经行动了。
所以,最好合适的房源数据每天能自动筛选出来,这样哪天想花点时间好好看都行,而且,每天的数据都有的话,定期还可以做个趋势分析啥的,到时候更容易有的放矢的去看房了。
3. 思路
带上上述需求,又打开了链家网,网上都说链家网的价格相比而言还是比较真实的。
之前学着用python爬过在售二手房数据,但是,在这个页面的筛选条件有限,如果全都爬下来,再筛选的话,量太大了,池子有些大了,最重要的是,筛选条件里没有“近地铁”。
在售二手房筛选条件.png所以,就想着换一个思路,如果是注重位置的话,从小区入手会比较好,再在小区内进行筛选房源,效果应该会更好些。
做完之后,总结一下整个思路就是:
- 数据获取:筛选小区——筛选户型——备选房源;
- 分析内容:
- 筛选出小区在售二手房数量的热力分布;
- 备选房源临近地铁站标注;
- 备选房源所在小区距离工作地点的距离和通勤时间;
4.过程
数据获取和分析均是通过python实现,数据获取的核心思路就是获取链接——解析页面——获得数据。
参考:【实战】 python爬取链家北京在售二手房数据(一)
【实战】 python爬取链家北京在售二手房数据(二)
并且,通过windows自带的任务计划管理,每天定期爬所有python代码,这样,就可以获得每天的数据和分析结果,哪天想看或者分析一段时间的变化都有数据啦~
接下来,主要介绍思路过程和结果,代码啥的就不放了。
1. 数据获取
1. 小区筛选
链家有小区这个版块。
最重要的是,有“近地铁”的筛选条件,这样可以筛出近地铁的小区。
当然,近地铁的同类型的肯定偏贵,城中心的肯定也不会在考虑范围内了。
因此,额外增加了两个条件,“均价8万以下”,“楼龄在20年以内”。
筛选小区.png就得到筛选出来的小区了,得到了小区数据,包括:小区名字
,所有户型链接
,所在区域
,所在商圈
,建筑类型
,建成时间
,最近地铁
,户型总数
,30天成交套数
,正在出租套数
,当月均价(元/m2)
,二手房在售套数
。
2.户型筛选
在得到每个小区的户型链接
之后,以金隅丽景园
为例,在小区链接后加上huxing/l1
就能显示该小区所有的1居室户型情况。
由于户型情况是按照在售到暂无在售排列的,因此,当这个小区的户型页面中出现“暂无在售”之后的页面也就不用再爬取了。
筛选户型.png从而得到了户型数据,包括:小区名字
,户型面积
,室数
,厅数
,卫数
,朝向
,使用率
,在售二手房价格区间
,在售二手房数量
,成交套数
,户型链接
。
3.备选房源
本阶段包括2次筛选:
第1次筛选:根据户型数据中的在售二手房价格区间
,在售二手房数量
,筛选出在售的在售二手房价格区间最小值低于250万的户型。
根据户型链接
可以得到该户型下在售二手房的链接。
房源信息.png
然后,按照之前的方式,根据房源链接
,获得房源信息数据,包括:标题
,副标题
,关注人数
,总价
,单价
,建楼年份
,小区名字
,所在区域
,所在环
,看房时间
,链家编号
,链家中介
,链家中介评分
,链家中介评价次数
,房屋户型
,卧室数目
,客厅数目
,厨房数目
,卫生间数目
,所处楼层与总楼层
,建筑面积
,户型结构
,套内面积
,建筑类型
,房屋朝向
,建筑结构
,装修情况
,梯户比例
,电梯数量
,户数量
,梯户率
,供暖方式
,配备电梯
,产权年限
,挂牌时间
,交易权属
,上次交易
,房屋用途
,房屋年限
,产权所有
,抵押信息
,房本备件
,近7天带看次数
,30天带看次数
,房源标签
,交通出行
,周边配套
,户型介绍
,核心卖点
。
第2次筛选:根据总价
,房屋用途
,房屋年限
,抵押信息
,产权使用
字段筛选出低于300万的普通住宅,满五年,无抵押,非公有的房源。
最后,与小区数据进行merge合并,就能得到含小区数据的备选房源数据了。
备选房源数据.png2.分析内容
1. 小区在售二手房的数量热力图
数据来源:小区数据
工具:python+高德地图API+百度地图API实现。
首先,根据小区数据中的行政区+小区名字,通过高德地图API的地理编码获取该小区的经纬度信息。
再根据小区在售的二手房数量,通过百度地图API作出热力图,效果如下:
刚需小区热力图.png2. 备选房源临近地铁站标注
数据来源:备选房源数据
工具:python+百度地图API
首先,根据备选房源数据中的最近地铁
获取地铁站名,再通过百度地图的地铁图API进行站点标注,效果如下:
其中,起点是备选房源临近的地铁站点;终点是工作地点临近的地铁站(郑老师要跑的校区比较多)
3. 备选房源所在小区距离工作地点的距离和通勤时间
数据:备选房源数据
工具:python+高德地图API
根据备选房源数据中的行政区+小区名字,通过高德地图API的地理编码
获取该小区和工作地点的经纬度信息,再通过其中的公交路径规划
获得备选小区分别到7个工作点的数据,包括:起终点步行距离
,路线出租车费用
,路线时间
,路线费用
,路线距离
。
最后,对每个小区进行汇总统计出,每个小区到这些地点的平均和加权平均(毕竟有的小区郑老师去的比较少)情况,也算是作为一个参考指标吧。
PS:
在进行地铁站标注和热力图的时候,最开始用的就是百度地图API。
但是,后来发现,需要返回数据的地理编码的使用每天有额度限制,百度地图得实名认证后才能提限(每天6000次),作为新手,代码写的不自信,总得不断测试,很快就用完了限额。
本来都上传身份证了,结果还硬性要求写100字以上的使用说明,用在什么产品和场景上,最讨厌限制很多字数的命题作文了,怒转高德地图API。
高德地图API现在是阿里巴巴旗下的了,用支付宝登录就行,直接就是实名认证的开发者,地理编码的配额是30万次/天,重点是,高德地图API里有返回数据的示例,这样不用自己测试也知道返回的数据咋样了,百度就没有。
但是,百度地图API中的Javascript API无限制使用,感觉地铁图和百度地图更熟悉些,所以,在涉及到返回数据(经纬度,路径规划)的时候,用的是高德地图API,在可视化的时候就用了百度地图API。
【两者服务的配额对比】
配额对比.png【两者返回参数的对比】
公交路径规划返回参数对比.png5. 遇到的问题
在有了大概的思路后,开始爬数据到分析数据都学着用python去解决,这样更好地实现自动化。
数据爬取虽然之前照着人家的代码写过,但是,对整个的数据获取和分析过程,可以算是新手了,这4、5天的,基本上也是从最开始的不懂——百度——copy——修改+调试——百度——修改+调试*n次——现在的似懂非懂,但至少满足了需求。
大概记录下过程中花费时间较多的几项:
- 小区数据一直变:其实在白天跑的时候,小区数据一直变,导致字段爬到一半数据就变了,这导致,跑了好几次都没出结果。解决:就设定在晚上跑代码,并且,设置若出错,代码就自动重现再跑。
- 户型数据爬到一半就卡了:最开始晚上跑代码的时候,早上一看还在跑,不大可能啊,整套下来应该超不过4个小时的,后来说是可能爬取速度过快导致页面可能一直没响应就卡了。解决:设置睡眠时间,缓冲一下。
- 链家网页验证:由于最开始傻傻的按照之前的方式爬取,然后又一直在测试,结果,链家网站就发现我这个IP访问频繁了,得输入验证码才能查看页面了。解决:使用代理ip和每次随机使用user-agent,就没出现问题了。
- python的学习:
- 数据框的操作:在用python分析数据时,主要用的就是pandas和numpy,python真的是,概念那么多,列表,字典,数组,数据框,Series啥的,转来转去的,学也花了不少时间,得找时间系统看看这些了。
- python变量传到JavaScript中:本来最开始是学着用jinja2,根据html模板,用python将变量传到html中来自动出html的(即地铁站标注和热力图),但是,格式啥的感觉都没问题,死活传不过去。解决:html直接写在python里当成文本生成html文件就好了。
- 其他:还有些其他关于excel的操作,比如给excel追加sheet表等。
当然,其中还有很多其他的磕磕绊绊,比如,如果地铁名不对,就标注不出来,AK粘错了,html也出不来等等……
还有个问题没解决,以后看情况再解决,房源页面中的首付
字段没爬取下来,根据房源的情况,首付不仅仅是总价*35%这么简单,还涉及到一些税费啥的。
而这个字段的数据属于异步加载的爬取,这个貌似还挺麻烦的,到时候再说吧。
而且,后续肯定还要继续分析啥的,也会遇到更多的问题的,兵来将挡、水来土掩吧。
6. 后记
总得来说,通过一系列的操作还是实现了主要的需求了。
虽然,整套操作中就透露着“没钱买房”的味道,而且,也许后期会发现“然并卵”……
但是,项目驱动学习吧,整个过程中还是可以学习和了解到不少新东西的,python啊,html啊,JavaScript啊,大致感受了什么是API了……
而且,拿着这些也好给郑老师交差了。
一方面,还是努力攒钱吧,另一方面,信息筛选的任务我差不多完成了,以后要是去看房跟人打交道的任务就交给擅长跟人聊天的郑老师,根据这些信息,以点带面、有的放矢地去看了。
PS:文中涉及到的一些操作:python爬取、分析、使用百度和高德地图API作图啥的,以后找时间写写吧。