上海租房房源数据分析(基于R的案例分析)(一)

本文作者使用Python爬取链家上海租房数据,再用R进行清洗和分析,通过K-Means算法对房源进行分类。数据特征包括:面积、租金、户型、楼层、装修、地铁等。分析发现,房源主要集中在浦东,且大户型集中在市中心,租金与面积正相关。
摘要由CSDN通过智能技术生成

0.前言

沪上即将毕业党,面临着租房的压力(为什么不是买房?呵呵呵呵你想什么呢。。。。),因此想收集下上海租房信息。比较了几个网站,发现链家数据较易爬取,格式工整,维度丰富,因此,从链家入手,用Python进行数据采集,用R语言对采集后的信息进行数据分析,最后用K-Means聚类算法对房源分类并对租金进行建模,以期真正将所学用到所用之处。(哈哈哈哈哈,但愿~~)
注意:本文只针对初入数据分析的小小白,大神可以绕道~

1.数据获取

首先打开链家网站,进入租房板块[https://sh.lianjia.com/zufang/]

这里写图片描述

总共38667套出租房源。在列表中信息也算比较丰富了,有求租者最关心的区域、房型、面积、朝向、楼层、租金以及图片等信息。是否需要抓取这部分信息呢?别急,点开列表中某一个房源,我们会发现主页内提供的信息更为齐全,因此确定我们提取的信息来源为房源主页。

这里写图片描述

(1)工作环境

我用的是Python 3.X版本(忘了具体哪个版本了。。)。建议用chrome打开网页,因为chrome的开发者工具(网页右击“检查”)能大大方便数据的爬取,用Jupyter notebook作为IDE。在Jupyter notebook工作前,需要安装几个爬虫要用的库。打开DOS,依次输入:

pip install requests
pip install BeautifulSoup4
pip install Jupyter notebook
Jupyter notebook

即可。

(2)爬取思路

通过观察网址,发现每个房源的网址信息都 是https://sh.lianjia.com/zufang/xxx.html格式,其中xxx为房源编号。
三万多房源,当然不可能在一页内全部展示,这里理所当然采用了分页,页面上显示了前100个分页信息。通过观察每页的网址,发下每页的格式同样非常简单https://sh.lianjia.com/zufang/pgx/,其中x表示当前页数,比如点击https://sh.lianjia.com/zufang/pg56/就进入了分页56.

这里写图片描述

因此确定了爬取思路,非常简单,就是两个for循环,第一层循环为分页,从第1页到第100页;第二层循环为每个分页内30个房源,在这一层循环中爬取每个房源的信息。

(3)代码

首先导入需要的库库包包~

import requests
from bs4 import BeautifulSoup
import re

然后我写了一个自编函数,用来针对每一个房源,爬取相应信息:

def getHouseDetail(url):
    result={}
    res=requests.get(url)
    soup=BeautifulSoup(res.text,'html.parser')
    for info in soup.select('.overview'):
        otherinfo3=info.select('.zf-room')[0].text
        result['小区名称']=otherinfo3[otherinfo3.find('小区:')+3:otherinfo3.find('\n',otherinfo3.find('小区:'))]
        result['面积']=float(otherinfo3[otherinfo3.find('面积:')+3:otherinfo3.find('平米')])
        result['户型']=otherinfo3[otherinfo3.find('户型:')+3:otherinfo3.find(' ',otherinfo3.find('户型:'))]
        result['区域']=otherinfo3[otherinfo3.find('位置:')+3:otherinfo3.find(' ',otherinfo3.find('位置:'))]
        result['楼层']=otherinfo3[otherinfo3.find('楼层:')+3:otherinfo3.find(' ',otherinfo3.find('楼层:'))]
        result['最高楼层']=int(otherinfo3[otherinfo3.find('共')+1:otherinfo3.find('层',otherinfo3.find('共'))])
        result['朝向']=otherinfo3[otherinfo3.find('朝向:')+3]
        if(len(info.select('.tips'))>0):
            result['装修情况']=info.select('.tips')[0].text
        else:
            result['装修情况']='暂无数据'
        result['租金']=int(info.select('.total')[0].text)
        if(otherinfo3[otherinfo3.find('卫  ')+3:otherinfo3.find('卫  ')+5]=='整租'):
            result['出租方式']='整租'
        else:
            result['出租方式']='暂无数据'
        result['地铁']=otherinfo3[otherinfo3.find('地铁:')+3:otherinfo3.find('\n',otherinfo3.find('地铁:'))]
        #result[
  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值