R的爬虫和回归模型案例-以北京自如房租价格为例

本文介绍了使用R语言进行网络爬虫获取北京自如合租月付房租数据,通过数据清洗、正态性检验、缺失值处理和变量相关性探索,建立回归模型以分析房租价格与房间信息的关系。最终模型通过了正态性、独立性、线性和多重共线性检验。
摘要由CSDN通过智能技术生成

一、背景

爬虫向来不是R的专长,但并不代表R在此方面一事无成。正好在学习R的rvest爬虫包,不如边学边做,自己来做一个案例。
作为一名消费者,自如不错的管理服务和靠谱的房源使得在帝都想省事儿的我们,即使花高于周边其他竞争者的价格,也愿意租住自如。不过,只要是住过自如一两年或看过自如几次房子的小伙伴应该会注意到,自如的房价与我们实际所看到房间的自己预估价格,并不是都契合的,总是会存在被高估和被低估的房子。那么,作为一名消费者,在与商家的博弈中,消费者手上有更为透明的信息无疑会有更强的议价能力。
所以,本案例的目的在于,通过分析现有房租价格和房间信息之间的关系,建立基于这些信息的定价体系回归模型。

二、数据收集

自如作为一个现在最大的房屋租赁中介,已经在其官网上放置了海量的数据,所以,本案例分析的所有数据自然全部来自北京自如官网。
在开始介绍爬虫之前,先就自如官网的数据信息的几个特点说明一下:

  • a、该网站信息是处于实时更新状态,本次爬虫获得的数据是2017年1月5日14:26获得的;
  • b、该网站的租房信息也不是那一时刻自如所有的信息,自如有还多待租但还没有上网的房源(是的,我的根据是每次找房时候自如管家总会神秘的对我说,『除了网上的,我们还有几个没上网的房间,要不看一下』);
  • c、本次分析的目标信息是自如合租月付这类房子,整租、日付、自如寓等以后有精力再说;
  • d、本次分析的数据只包括北京城六区(东城、西城、朝阳、海淀、丰台、石景山)外加昌平的自如合租月付数据,一方面是个人找房方位的喜好,一方面是其网页设置的原因,待会儿会提到。

1、首先是找数据源。
这里写图片描述

2、其次是不断观察总结各个数据节点,找到目标数据所在节点。
这里写图片描述
3、再次是对照包的参数,形成相应的爬虫代码。

library(rvest)
library(stringr)
library(XML)
library(xml2)

WebSpider <- function(m){

  url <- str_c(cp,"?p=",m)

  web <- read_html(url,encoding = "UTF-8")#抓取网页信息

  name_rough <- web %>% html_nodes("h3")  %>%  html_text() #获取粗房屋名

  area_rough <- web %>% html_nodes("h4")  %>% html_text() #提取区位

  price_rough <- web %>% html_nodes("p.price")  %>% html_text() #提取价格

  price <- str_extract(price_rough, "[0-9]+") %>% as.numeric()#提取精确价格

  detail <- web %>% html_nodes("div.detail")  %>%  html_text() #提取其他信息

  #合并成数据框
  data.frame(name_rough,area_rough,forward,mate_num,location,price,detail)
}

不过,这就遇到了一个问题,在提取『detail』一块时,无法再往下有区分的抓取了,因此造成最后抓到的数据是这样的:
这里写图片描述
只能在Excel里操作整理完成了。
4、接着是观察翻页规律,然后遇到了一个坑。原以为之后的页码不过是http://www.ziroom.com/z/nl/z3.html的基础上加上/1、/2……..,我依照这个思路抓了一番,也获得了将近4000多条数据,原以为这大概就是全部吧。但我仔细看数据才发现,这样下来的基本都是房山、大兴和通州等的数据,基本没有城六区的,城六区的只有选了区域选项后才会出现:

dc <- "http://www.ziroom.com/z/nl/z3-d23008614.html"
xc <- "http://www.ziroom.com/z/nl/z3-d23008626.html"
cy <- "http://www.ziroom.com/z/nl/z3-d23008613.html"
hd <- "http://www.ziroom.com/z/nl/z3-d23008618.html"
ft <- "http://www.ziroom.com/z/nl/z3-d23008617.html"
sjs <- "http://www.ziroom.com/z/nl/z3-d23008623.html"
cp <- "http://www.ziroom.com/z/nl/z3-d23008611.html"

这样一来,只有逐区的来进行翻页爬了。为此,只能选定部分区域来做分析了。

results_cp <- data.frame()
for(m 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值