1个机会
大概是产品经理的职业习惯吧。写文档前一定要讲背景。
地图poi数据查询工具EasyPoi上线后,有同学问我如何获取一个城市的社区的数据。
这个问题这么简单,因为EasyPoi就是专门解决这类问题的。你只需要根据社区的关键词直接在EasyPoi搜索就可以解决了。
但也有同学提出,想要小区房价、住户等数据,所以EasyPoi无能为力.
因为提问的同学很多,而且都是为了合理的理由:为了科研或者论文。
基于这个问题,我做了一些调查和研究,终于找到了解决的办法。在这里,我分享给你。
2选择数据源
术业有专攻,想要小区的房价数据,自然要去一些大型的房产中介互联网公司。
在对比了链家、安居客、诸葛找房、企名网等房产中介平台后,我们最终选择了链家,因为其所在小区的数据最全,房价数据也相对准确。
然后我根据链家搜索选择了科控股公司。可能有同学不知道Ke Holdings Inc .和链家搜索的关系,这里简单介绍一下。
科控股股份有限公司是一家房地产中介服务平台,除了自有连锁品牌外,还有德佑、福房等多个其他房地产中介品牌。
比如科控股公司就类似于平台,链家搜索相当于的自营,其他加盟品牌相当于一些第三方卖家。
前端页面和后端的技术架构和链家差不多。我们来看看贝壳的地图,了解一下房子的样子。除了聚合球形气泡的颜色与链家不同外,看起来没什么不同。
3技术方案
在选择了Ke Holdings Inc .作为数据源后,一个新的问题产生了:如何从Ke Holdings Inc .获取一个城市的所有名称和房价数据?
很多同学应该想到过用爬虫。
是的,目前看来,从网页中获取数据的唯一途径就是使用爬虫。
从爬虫收集数据有两种方式:一是直接解析网页最简单粗暴的方式。通过这种方式,理论上所有的元素(文字、图片、视频等。)你能在网页上看到的都可以收藏。第二,通过网站提供的api接口获取数据。
也有同学可能会问,API是什么?
是API编程接口的缩写,计算机术语是应用编程接口。
是不是有点难以理解?我们打个比方。
你去超市买了一杯酸奶,付完钱就迫不及待的喝了。
于是你熟练地撕掉酸奶上的草包,把吸管插进牛奶盒,美美地喝了一口。
在这个过程中,吸管相当于一个API,为你提供了一个与牛奶互动的渠道或服务,你可以通过这根吸管喝到牛奶。
比如百度地图有丰富的poi数据,它提供了一个叫place api的服务。你只需要调用这个服务就可以得到百度地图的poi数据。
Shell示例界面,感兴趣的同学可以复制下面的链接到浏览器地址栏查看返回的数据;
adcode data source : city Id: city的ESF,默认参数,不考虑condition:的默认参数,id :的默认参数,groupType:的聚合数据的类型,三级枚举值,district表示返回到城市的区县的聚合泡沫数据。Bizcircle表示返回的区县商圈内的泡沫数据,community表示商圈内的单元格数据。maxLatitude:当前可见网页矩形内的最大纬度,minLatitude:当前可见网页矩形内的最小纬度,maxLongitude:当前可见网页矩形内的最大经度,minLongitude:当前可见网页矩形内的最小经度。
贝壳后台的api接口确定后,我们再来看如何获取整个城市的社区数据,直接说分析结论:通过上面的分析,我们可以看到,每次在地图上缩放找房,都会得到可见矩形区域内的社区数据,每次最多返回100块。
现在应该有同学明白这一点了,这和EasyPoi获取所有城市的原理是一样的:把整个城市看成一个矩形区域,然后划分成矩形区域,直到矩形区域中返回的社区数小于等于100。有些同学可能还没看懂。再放一张图吧。图中的数字都是例子:
04
4计划实施
根据以上原理,我们来解释一下程序实现的步骤:
1 .获取目标城市行政区域的边界坐标。比如下面是四川省成都市的行政区域坐标,是一个不规则多边形。我们需要得到多边形边界上的坐标点;目前高德地图和百度地图都有查询行政区域边界坐标的功能;
2 .根据行政区域的坐标,获得多边形边界的外接矩形。在地理区域的矩形区域中,只能确定左下角坐标和右上角坐标;
3用递归程序对得到的矩形区域进行分割,直到分割后的矩形区域中的单元格数据个数小于等于100。这里我就不重复矩形区域分割的图片了,大家可以参考上面的图片。
4.在最终获取的矩形区域内采集小区数据并存储在本地;运行截图:
最终获得的数据截图:
1【腾讯文档】社区样本数据
5源代码获取
获取的原理和技术方案上面已经毫无保留的解释清楚了。有编程基础的同学,不管你用python、go、ruby还是R语言,应该都能轻松实现。
可能确实有一些不懂编程的同学需要这些数据,但这是一个爬虫,而且是非常大规模的爬虫。在示例中,天津收集了近10,000个社区。如果全国所有城市都跑下来,那肯定是几百万的数据。如果被滥用,后果会相当严重。
所以不会公开源代码,这里只做技术上的讨论。
需要社群数据的同学可以给我,或者私信我聊微信(soaringsoul)。