第一次接触“租售比”这个概念是在知乎 团支书 对 如何经过房屋租售比来判断房产的价值或泡沫? 这个问题的回答上看到的,当时看到她搞出来的一些图和分析就感受颇有意思,寻思着本身也能够尝试用相同的方法对北京的房屋租售信息作一个分析。没想到一搜索,相似的东西早就有人作出来了。好比在知乎上的这个问题:北京在哪里租房的居住性价比高?。高票答案虽然来自链家旗下自如的员工,可是其以热力图一目了然的展现出了北京出租房房租的高低分布状况,难怪下面会有知友回复说:广告满分。而后还有这篇文章【租房数据分析】2016年在北京如何租到好房子?,再加上今年这刚一开始,北京、上海的房价又开始一轮疯涨,天然就更让你们开始关注房产有关的信息。因而,我的也尝试着把这个事情搞一搞。javascript
首先来看处理流程,其实就是一个数据收集、处理、分析和展现的过程。php
对于数据收集,58同城、赶集网、链家网这些上面有着丰富的信息,只不过对于前面两个网站,如今,哦,可能一直都是这样,已经差很少都被中介信息给淹没了。因此即便这些网站已经提供了大量的信息,可是若是真的想拿来使用,仍是要进行一些处理。html
对于数据分析,相信每一个人都有本身独特的视角,一样一份数据,不一样的人有着不一样的关注点,因此很难制定统一的规则,这里就单从价格这一方面来作一个统计。java
对于数据展现,由于要看的是一个城市的数据,所以热力图是一个很好的选择,而百度地图已经提供了很方便的接口,因此这里使用百度的地图接口来进行热力图的展现。git
由此,处理流程大体分为一下几个步骤:github
这里以赶集网的二手房销售信息为例,演示如何抓取数据并将结果展现到热力图上。web
首先打开 赶集网北京站,能够看到,排在左上角的就是”北京房产”, 由这个位置就能够想见,房地产相关的业务得占了它全站多大的比例。json
咱们直接点击 二手房 来看一下这个页面,发现上面给出了北京市的几个区域,方便用户在特定城区查找房源。api
若是你看过知乎上的这个问答:如何不吹牛地形容北京有多大?,那么你必定会理解对于帝都来讲,只给出一个城区那范围有点太大了。所幸,这些网站都在某个区域下给出了更详细分区。app
页面的下半部分,是各大中介发布的出售信息,先别为使人咋舌的房价感慨,随便点开一条信息,进入到详细页面,能够看到里面把总价、单价、户型、楼层、小区、位置等都描述的很是清楚了,有点甚至连首付和月供都已经帮你算好了。这么丰富的信息,基本上已经知足了从多个维度对房产信息进行分析统计。
可是做为演示,暂时没有必要搞那么复杂,这里只须要统计一下每一个小区的均价,给出按照小区价格的热力图就能够了。
在详细页面里给出了该条出售信息的房源所属的小区,点击进入小区的详细页面,能够看到小区有着这样一个结构。
点击上一级页面,咱们看到有关小区的列表页,并且这里已经给出了某个小区的均价。
由此咱们能够制定咱们的抓取策略。首先咱们抓取某个城市的区域信息,而后抓取某个区域下面的子区域信息,最后再抓取某个子区域下的小区信息。
这里还有一个问题须要注意,某个区域下的小区列表可能不只仅只有一页,因此还要处理翻页。
由图便可看到翻页的规律。
这里使用最简单的方式-基于 urllib2 进行页面抓取
1 |
|
打开抓取的页面,使用Chrome的开发者工具对HTML进行分析
由此便可根据 XPath 肯定城市下面的区域选择器为
1 |
area_select = '//dl[@class="selitem selitem-area lh24 clearfix"]//div[@class=" clearfix"]/a[@rel="nofollow"]' |
以lxml做为解析HTML的工具,尝试获取城市的区域信息
1 |
from lxml import etree |
使用相同的方式,便可实现对某个区域下子区域信息的抓取,这里以海淀区为例
1 |
import urllib2 |
再来试试对某个子区域下小区信息的抓取,这里以宇宙中心-五道口为例
1 |
import urllib2 |
数据有了,接下来就是如何展现。
首先查看一下百度地图的JavaScript API,里面提到
该套API免费对外开放。自v1.5版本起,您需先申请密钥(ak)才可以使用,接口(除发送短信功能外)无使用次数限制。
因此,注册一个账号,而后申请密钥便可。
文档里已经给出了一个热力图示例,经过源码能够看到关键在于定义点坐标。
1 |
var points =[ |
好在百度开放平台提供了Geocoding API
Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可使用C# 、C++、Java等开发语言发送HTTP请求且接收JSON、XML的返回数据。
测试一下
1 |
import urllib2 |
返回结果格式以下
1 |
{"status": 0, |
有了它就能够批量完成已抓取小区的坐标转换了。
1 |
import urllib2 |
数据有了,如今只须要把热力图示例中给出的页面修改一下,就能够显示抓取到的结果了。
1 |
<!-- 这里要添加本身的密钥 --> |
根据赶集网的页面规则,测试一下抓取效果
1 |
index_url = 'http://bj.ganji.com/xiaoqu' |
完整代码参见: house_spider
既然是爬取别人网站上的数据,固然道德也很重要,咱们来看一下赶集网Robots规则
1 |
User-agent: * |
还好咱们只是抓取租售信息,这些都并不在屏蔽之列,只要不是抓的太狠(间隔时间太短),仍是能够基于此尝试作一些有趣的统计和分析的。
文章标题:Python爬取房屋租售信息
文章做者:matrix-lisp
发布时间:2016年03月20日
原始连接:https://matrix-lisp.github.io/2016/03/20/house-spider/
许可协议:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)