一、爬取数据
如果直接从总页面按照页数从头到尾爬取,最多只显示50页,每一页60个房源,总共3000个,说明安居客并没有直接全部显示。于是按照区域逐个进行爬取,一共10个大区域,其中玉山的房源较多,又分了5个小区域,总共是14个细分区域。其中一个代码如下。
library(RCurl)
library(XML)
library(stringr)
myheader<-c("User-Agent"="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36",
"Accept"=" application/json, text/javascript, */*; q=0.01",
"Accept-Language"=" zh-CN,zh;q=0.8",
"Connection"="keep-alive",
"Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7"
)
page<-1:50
base<-"https://ks.anjuke.com/sale/shiqukunshan/p"
pageresults<-data.frame()
for (i in 1:length(page)) {
url<-paste(base,page,"/?from_price=101&to_price=120",sep='')
source<-getURL(url,httpheader=myheader,followlocation=TRUE,encoding="utf-8")
parse <- htmlParse(source)
#标题
a<-getNodeSet(parse,"//div[@class='house-title']/a/@title")
title<-iconv(a,"utf-8")
#面积
info<-sapply(getNodeSet(parse,"//div[@class='details-item']/span/text()"),xmlValue)
mianji<-str_subset(info,"m")
mianji<-str_sub(mianji,end=-3)
#楼层
louceng<-str_subset(info,"层")
#房型
fangxing<-str_subset(info,"[室]")
#时间
shijian<-str_sub(str_subset(info,"建造"),end=-4)
#小区+地段
b<-str_subset(info,"\n")
c<-str_trim(b)
c1<-lapply(strsplit(c,"\n"),function(x){x[1]})
xiaoqu<-str_trim(c1)
c2<-lapply(strsplit(c,"\n"),function(x){x[2]})
diduan<-str_trim(c2)
#价格
d<-getNodeSet(parse,"//span[@class='price-det']/strong/text()")
zongjia<-sapply(d,xmlValue)
e<-getNodeSet(parse,"//span[@class='unit-price']/text()")
e1<-sapply(e,xmlValue)
danjia<-str_sub(e1,end=-5)
#经纪人
jingjiren<-sapply(getNodeSet(parse,"//span[@class='brokername']/text()"),xmlValue)
#链接
f<-getNodeSet(parse,"//div[@class='house-title']/a/@href")
link<-iconv(f,"utf-8")
result<-data.frame(title,mianji,louceng,fangxing,shijian,xiaoqu,diduan,zongjia,danjia,jingjiren,link,stringsAsFactors=FALSE)
}
pageresults <-rbind(pageresults,result)
write.csv(pageresults,"1.csv")
其余区域整体代码相似,在base处将各区域url代入即可。
二、清洗数据
全部爬完一共有33万的数据,导入Excel进行数据清洗,删除重复数据之后为3万3千条,字段内容检查后并没有缺失,在第一行添加字段名称,清洗后的数据如下所示。
三、分析数据
二手房网站上的数据不一定是最终成交价格,因而信息仅供参考。一共是标题、面积、楼层、房型、时间、小区、地点、总价、单价、经纪人及链接共11个字段,以下选择部分字段进行分析。
因300平方以上的房源较少,取了300以下的进行分析。最热门的面积位于81-100的区间,其次是121-140和101-120两个区间,但分别也只有第一的一半左右,可见小户型房源更受购房者欢迎。
取60-200平方这个大区间来分析,末位数是0和5的房源数比较多,基本图中的峰值都对应着85,90,95之类的面积。例外的两个极值:89和143,查看房地产交易政策后发现这两个面积与90、144平米相比意味着更少的税费和首付,交易政策的影响显而易见。
位于中层的房源占42%,其次是高层占24%,以及低层房源和别墅分别占17%。
三室两厅占据房源总量近1/3,二至四室+两厅的房型占了70%,可见客饭厅分离的房型占据了绝大多数,社交需求以及追求更好的居住体验使得两厅甚至多厅成为一种趋势。
1995年前的房源很少,而2010年的房源最多,2011年急剧下降。原因来自当年昆山的限购政策,2010年房价急剧上涨,2011年限购后交易量断崖式下跌,2012年市场回暖,同时今年正好是2012年后的第5年,满五年可以减税,房源数次之。2015年作为满2年减税的年份,同样房源数量可观。由于去年昆山再次限购以及新房税费高的问题,近两年的房源相较而言略少,政策的影响再次得到体现。
玉山房源总数占了57%,这也是昆山的主城区,其中市区房源最多,剩余地区房源占比都不足10%。
在售房源最多的10个小区全部位于玉山市区,市中心是购房最大的热门。
总均价以121-140万和101-120万最多,扩大来看80-180万是购房的主力区间,占据了总数的半壁江山。
总均价最高的10个小区都是别墅,8个位于城西,其余2个分别在城南和城东,均已经超过1000万,最高达到3000万,相比之下昆山的整体均价(217万)只是一个零头。
单价均价的分布可以看到1-1.2万是二手房交易的主力单价,其次是1.2-1.4万以及0.8-1万。
单价均价最高的10个小区基本都在昆山均价(15532)的2倍以上。其中除了四个是位于城西的别墅小区外,其余六个都是昆山最好的小学和初中:实小和二中的双学区房,学区房是房地产的第一支柱。
高达62%的房源是精装修,也不排除部分经纪人为了引人关注而特意如此发布,实际并未达到要求。
按区域来看,平均住宅面积前两位分别是淀山湖和巴城,平均单价最高的区域是城西,居住环境良好,楼盘较新,面积也不小,总均价在300万以上。
对60到200平米的房源面积和总价建模,看到面积和总价有明显的线性关系,通过SPSS回归分析得到线性模型为Y=-12.722+1.515X,其中X为面积,Y为总价。
通过SPSS二阶聚类模型对14个区域进行了分类,看到可以大致分成五类:
类型1单价最高,面积最小,年代最久远,对应着昆山市区的房源,老旧狭窄,学区因素影响极大;
类型2单价和面积均较高,年代也很新,对应着城西和花桥,都是近年涨势很猛的区域;
类型3面积最大,年代也最近,包括巴城、城东、淀山湖、锦溪、周庄全部以及城西的少量房源,新建别墅区大部分位于这些区域,价格自然也不低;
类型4价格略低,面积尚可,年代稍久,对应城北区域,综合比较来看这一块是绝大多数新昆山人购房的首选之地;
类型5单价最低,对应着城南、陆家、千灯、张浦和周市一共5块区域,地域偏远、开发不完善以及部分环境问题影响了房价的高企。
最后统计了经纪人发布标题中的关键词,用R提取前50个最热门关键字作为词云。