@runzhliu
2018-05-15T23:55:50.000000Z
字数 3269
阅读 1211
豆瓣
租房
作为一个工作在杭州,家住宁波的中山人,为了节省房租(毕竟一周如果不加班,只在杭州住四个晚上),总想着花1000块钱,租个上班很近,一房一厅,一厨一卫......
1000块钱想在杭州租个这样的房子,其实是不存在的。
那么你到底想要个什么样的房子呢?这里我梳理一下自己的需求。
离公司3公里内,意味着就算车子坏了,骑个车或者坐公交车上下班,都可以控制在30分钟内,这个对于我这种工作狂是很重要的;房租1500以下,嗯,我穷啊!有厨房,那是因为我喜欢自己做饭带饭,毕竟能吃的好点,也能省点钱。
找房子的途径,其实有很多。作为一个打工仔,我比较喜欢在豆瓣上找,主要是能找到一些个人转租的房子,一来是可以节省中介费,二来豆瓣上转租的朋友们还是比较友好的,至少比直接接触二房东会好一点。
那么在豆瓣上找房子是怎样找的?个人经验是在小组里面进行搜索,先找到像「滨江租房」这样,带有强烈位置、地铁标识的小组,然后根据帖子数量和回复帖子数量来判断小组活跃程度,因为不活跃的小组可能找不到最近的房源。一般情况下,我还会选择根据搜索功能,来搜索心仪的几个小区,查看一下心仪的小区最近有没有合适的房源。
而由于豆瓣小组实际上并不提供丰富的搜索功能,而为了更高效地找到合适的房源,我的计划是利用爬虫,爬取合适的小组的帖子,再进行二次开发。
作为一名大数据研发工程师,虽然没有直接参与公司相关的爬虫项目,但是作为基本功,还是可以简单做一个能提供基础功能的 web
页面的。
通过豆瓣小组找到搜索最新关键词的接口格式:
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 进行爬虫,滨江租房。
一个简单的爬虫演示及其返回的结果。
#! /usr/bin/env python
import requests
url = "https://api.douban.com/v2/group/539160/topics?count=100"
response = requests.request("GET", url)
topics = response.json()['topics']
for topic in topics:
print(topic['title'], topic['updated'], topic['share_url'])
"""
滨江区政府、星耀城、海康看过来大独卫1500 2018-05-01 22:20:41 https://m.douban.com/group/topic/116118103/
滨江西兴地铁400米 春波南苑朝南一室一厨一卫出租30平2200每月全部实体墙 电话18358194363微信同号 华为 网易 海康边上 2018-05-01 22:10:27 https://m.douban.com/group/topic/116431921/
滨康路地铁站旁,江南国际城1500,房东直租 2018-05-01 22:07:57 https://m.douban.com/group/topic/116370275/
个人出租西兴地铁口春波南苑家电齐全,独立厨卫,干净清拎 ,2OOO元,电梯房,电话微信号15824121170。图片真实 2018-05-01 22:03:24 https://m.douban.com/group/topic/116431557/
缤纷西苑福利价,江陵路地铁口,押一付一,无中介费。 2018-05-01 22:02:30 https://m.douban.com/group/topic/116431504/
"""
爬虫过程中基本都会遇到 api
限制访问频率的问题,这是很正常的,当然也需要想办法去解决,就像豆瓣小组的 api
,如果访问过快,没过一会就无法访问了。
有了爬虫的基础结构之后,我们考虑如何使选择房子的操作更加简便,至少得有帖子更新时间,小区名的排序或者聚合等相关功能,最好还有个 web
页面或后台来进行管理查看吧。
作为一个大数据研发工程师,开发简单的 web
页面还是应该作为基本功来对待的,毕竟以后如果需要展示数据的时候,如果组内没有 web
开发,那么看着终端的日志或者输出,那会是相当的蛋疼的。
flask-admin
是一个 flask
基础上开发的一个组件,主要用于 web
应用的后台开发,考虑到其有开箱即用的一些 web
常见组件,为了快速开发,于是我选择了这一框架。
以下是一个简单的效果图:
当然,如果想在寻找合适房源的过程中,更加方便,其实就功能来说,还有很大的提升空间。
在这个简单的例子中,可以看到我们可以通过 createDate, updateDate
,以及一个搜索框来找最近比较合适的小区、地铁站附件的房源,这样多少可以提供一点便利。
当然如果只有一个小组的信息实在太小了。有在豆瓣上找过房子的同学们应该都知道,有些人会把自己的房子的转租信息同时发在不同的小组里,所以如果是在「滨江租房」这个小组里找房子的话,其实还可以留意一下像「杭州租房」类似的这些小组。可以把导航栏弄成这样的布局:
信息的布局上其实并一定要用 flask-admin
来做,可以用 flask-table
来实现。
关于如何展示标题和 url
,其实可以在 title
直接加上链接支持点击跳转。并且支持预览图片。(预览图片可以做成 hover
的,但是我不打算做了,留给前端童鞋做吧)。
当然可以在导航菜单加个地图跳转。
如果只是展示爬虫获得的数据,那么这个项目就有点像是一个信息过滤器,但是实际上,我们仍然想像在淘宝购物上获得「相似房源」这样的惊喜,又或者可以在页面中提示该房源是否转租还是中介这样的提示。
考虑到标注数据非常的麻烦,这里我采用一些规则来判定这个帖子是否来自中介(这当然存在误判的可能)。
那么要用规则来对帖子进行标注,需要自己去观察帖子的情况,比如说一般中介发出的帖子内容主体字数比较少,另外就是可能会标有明显的「中介」词语等等。相反,个人转租的帖子也会有一些显而易见的特征,需要你对这些业务进行深入的了解。
标注过程比较简单,但是为了使模型的泛化能力更强一点,最好能够再次人工审核一下分别被标注成「中介」和「非中介」的帖子。因为作为样本,如果他们的分类比价准的话,那么无论是用传统的机器学习的方法,还是深度学习网络等方法,都会取得不错的效果。
Title
字段进行无效字符的过滤Url
返回 html
样式,支持点击跳转debug
模式开发docker
化 id
换豆瓣的帖子 id
,跳转设置到网页端title
过长进行截断