[关闭]
@runzhliu 2018-05-15T23:55:50.000000Z 字数 3269 阅读 1070

豆瓣租房策略

豆瓣 租房


参考
单机30分钟抓取豆瓣电影7万+数据:论爬虫策略的重要性(附全部数据下载地址)
[直播]猜测豆瓣小组api

1 前篇

作为一个工作在杭州,家住宁波的中山人,为了节省房租(毕竟一周如果不加班,只在杭州住四个晚上),总想着花1000块钱,租个上班很近,一房一厅,一厨一卫......

1000块钱想在杭州租个这样的房子,其实是不存在的。

那么你到底想要个什么样的房子呢?这里我梳理一下自己的需求。

离公司3公里内,意味着就算车子坏了,骑个车或者坐公交车上下班,都可以控制在30分钟内,这个对于我这种工作狂是很重要的;房租1500以下,嗯,我穷啊!有厨房,那是因为我喜欢自己做饭带饭,毕竟能吃的好点,也能省点钱。

找房子的途径,其实有很多。作为一个打工仔,我比较喜欢在豆瓣上找,主要是能找到一些个人转租的房子,一来是可以节省中介费,二来豆瓣上转租的朋友们还是比较友好的,至少比直接接触二房东会好一点。

那么在豆瓣上找房子是怎样找的?个人经验是在小组里面进行搜索,先找到像「滨江租房」这样,带有强烈位置、地铁标识的小组,然后根据帖子数量和回复帖子数量来判断小组活跃程度,因为不活跃的小组可能找不到最近的房源。一般情况下,我还会选择根据搜索功能,来搜索心仪的几个小区,查看一下心仪的小区最近有没有合适的房源。

而由于豆瓣小组实际上并不提供丰富的搜索功能,而为了更高效地找到合适的房源,我的计划是利用爬虫,爬取合适的小组的帖子,再进行二次开发。

作为一名大数据研发工程师,虽然没有直接参与公司相关的爬虫项目,但是作为基本功,还是可以简单做一个能提供基础功能的 web 页面的。

2 爬虫篇

通过豆瓣小组找到搜索最新关键词的接口格式:
https://www.douban.com/group/search?cat=1013&q=碧水豪园&sort=time

分析可以知道,关于需要寻找哪个小区,可以通过 q= 的参数来指定。

可以再举几个栗子:
https://www.douban.com/group/search?cat=1013&q=滨兴家园&sort=time
https://www.douban.com/group/search?cat=1013&q=玲珑府&sort=time

通过这种方式进行爬取,不太友好的地方在于还要出去 html 标签,所以考虑了一下,能否直接拿到 api,来爬取 json 格式的数据。

找到 api 之后,观察到获取的内容是你需要的内容之后,就可以考虑如何实现爬虫了。
豆瓣提供豆瓣 API 快速入门,根据条款,公司企业类的开发者,可以帮助开发者对其 API 有一个大概的认识,建议有时间的话,可以认真阅读。对于个人可能只能「硬来」了,当然也是在豆瓣开发者的协议规则上进行操作。

当然,豆瓣开发者平台也未提供豆瓣小组的 API 格式,所以这里,我就简单的分析了一下小组搜索返回的内容。

分析可以用这个 API 进行爬虫,滨江租房

一个简单的爬虫演示及其返回的结果。

  1. #! /usr/bin/env python
  2. import requests
  3. url = "https://api.douban.com/v2/group/539160/topics?count=100"
  4. response = requests.request("GET", url)
  5. topics = response.json()['topics']
  6. for topic in topics:
  7. print(topic['title'], topic['updated'], topic['share_url'])
  8. """
  9. 滨江区政府、星耀城、海康看过来大独卫1500 2018-05-01 22:20:41 https://m.douban.com/group/topic/116118103/
  10. 滨江西兴地铁400米 春波南苑朝南一室一厨一卫出租30平2200每月全部实体墙 电话18358194363微信同号 华为 网易 海康边上 2018-05-01 22:10:27 https://m.douban.com/group/topic/116431921/
  11. 滨康路地铁站旁,江南国际城1500,房东直租 2018-05-01 22:07:57 https://m.douban.com/group/topic/116370275/
  12. 个人出租西兴地铁口春波南苑家电齐全,独立厨卫,干净清拎 ,2OOO元,电梯房,电话微信号15824121170。图片真实 2018-05-01 22:03:24 https://m.douban.com/group/topic/116431557/
  13. 缤纷西苑福利价,江陵路地铁口,押一付一,无中介费。 2018-05-01 22:02:30 https://m.douban.com/group/topic/116431504/
  14. """

爬虫过程中基本都会遇到 api 限制访问频率的问题,这是很正常的,当然也需要想办法去解决,就像豆瓣小组的 api,如果访问过快,没过一会就无法访问了。

有了爬虫的基础结构之后,我们考虑如何使选择房子的操作更加简便,至少得有帖子更新时间,小区名的排序或者聚合等相关功能,最好还有个 web 页面或后台来进行管理查看吧。

3 Web 页面的开发

作为一个大数据研发工程师,开发简单的 web 页面还是应该作为基本功来对待的,毕竟以后如果需要展示数据的时候,如果组内没有 web 开发,那么看着终端的日志或者输出,那会是相当的蛋疼的。

flask-admin 是一个 flask 基础上开发的一个组件,主要用于 web 应用的后台开发,考虑到其有开箱即用的一些 web 常见组件,为了快速开发,于是我选择了这一框架。

以下是一个简单的效果图:

image_1cd93ba4r146nuod1mus26g1pes9.png-196.1kB

当然,如果想在寻找合适房源的过程中,更加方便,其实就功能来说,还有很大的提升空间。

在这个简单的例子中,可以看到我们可以通过 createDate, updateDate,以及一个搜索框来找最近比较合适的小区、地铁站附件的房源,这样多少可以提供一点便利。

4 优化的方向

当然如果只有一个小组的信息实在太小了。有在豆瓣上找过房子的同学们应该都知道,有些人会把自己的房子的转租信息同时发在不同的小组里,所以如果是在「滨江租房」这个小组里找房子的话,其实还可以留意一下像「杭州租房」类似的这些小组。可以把导航栏弄成这样的布局:

image_1ccmu363t1qqkgqt185jluvbjm9.png-63.9kB

信息的布局上其实并一定要用 flask-admin 来做,可以用 flask-table 来实现。

关于如何展示标题和 url,其实可以在 title 直接加上链接支持点击跳转。并且支持预览图片。(预览图片可以做成 hover 的,但是我不打算做了,留给前端童鞋做吧)。

image_1cctf68i71thl1aa01gta1fcrlms9.png-307.8kB

当然可以在导航菜单加个地图跳转。

image_1cdbk178s11e7e4mua2dfd6pi9.png-114.5kB

5 加点机器学习的料

如果只是展示爬虫获得的数据,那么这个项目就有点像是一个信息过滤器,但是实际上,我们仍然想像在淘宝购物上获得「相似房源」这样的惊喜,又或者可以在页面中提示该房源是否转租还是中介这样的提示。

考虑到标注数据非常的麻烦,这里我采用一些规则来判定这个帖子是否来自中介(这当然存在误判的可能)。

那么要用规则来对帖子进行标注,需要自己去观察帖子的情况,比如说一般中介发出的帖子内容主体字数比较少,另外就是可能会标有明显的「中介」词语等等。相反,个人转租的帖子也会有一些显而易见的特征,需要你对这些业务进行深入的了解。

标注过程比较简单,但是为了使模型的泛化能力更强一点,最好能够再次人工审核一下分别被标注成「中介」和「非中介」的帖子。因为作为样本,如果他们的分类比价准的话,那么无论是用传统的机器学习的方法,还是深度学习网络等方法,都会取得不错的效果。

TODO

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注