技术人如何用Python找到房源信息,对链家网租房进行分析

为了生存,为了能留在帝都,为了改变人生、出人头地,再贵的房子他们都要租,或者他们可以再寻找一处稍远点的房子。

图片来自 unsplash

各区域房源数量
区域 房屋出租量
东城 440
西城 846
朝阳 1451
海淀 1229
丰台 920
石景山 168
通州 1011
昌平 625
大兴 457
亦庄开发区 389
顺义 393
总计 7999

可以看到,Region=“望京”距离最近,所以我们重点在该区域内选择,接下来具体看看该区域内租房情况。

2.2 “分支” —— 关系节点与谓语

这一步的过程其实是通过起点一步步来寻找最终包含我们所需内容的节点。我们有时需要使用到相邻节点信息。因此,我们需要了解关系节点或者谓语。

  • 关系节点

一般而言,DOM 树中一个普通节点具有父节点、兄弟节点、子节点。当然也有例外的情况。这些有些节点比较特殊,可能没有父节点,如根节点;也有可能是没有子节点,如深度最大的节点。Xpath 也是有支持获取关系节点的语法。

关系 路径表达式 描述
parent(父) xpath('./parent::*') 选取当前节点的父节点
ancestor(先辈) xpath('./ancestor::*') 选取当前节点的所有先辈节点,包括父、祖父等
ancestor-or-self(先辈及本身) xpath('./ancestor-or-self::*') 选取当前节点的所有先辈节点以及节点本身
child(子) xpath('./child::*') 选取当前节点的所有子节点
descendant(后代) xpath('./descendant::*') 选取当前节点的所有后代节点,包括子节点、孙节点等
following xpath('./following ::*') 选取当前节点结束标签后的所有节点
following-sibing xpath('./following-sibing::*') 选取当前节点之后的兄弟节点
preceding xpath('./preceding::*') 选取当前节点开始标签前的所有节点
preceding-sibling xpath('./parent::*') 选取当前节点之前的兄弟节点
self(本身) xpath('./self::*') 选取当前节点本身
  • 谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。同时,它是被嵌在方括号中的。

路径表达式 描述
xpath('./body/div[1]') 选取 body 元素节点<font color='red'>下</font>的第一个 div 子节。
xpath('./body/div[last()]') 选取 body 元素节点<font color='red'>下</font>的最后一个 div 子节。
xpath('./body/div[last()-1]') 选取 body 元素节点<font color='red'>下</font>的倒数第二个 div 子节。
xpath('./body/div[position()-3]') 选取 body 元素节点<font color='red'>下</font>的前二个 div 子节。
xpath('./body/div[@class]') 选取 body 元素节点<font color='red'>下</font>的所有带有 class 属性的 div 子节。
xpath("./body/div[@class='content']") 选取 body 元素节点<font color='red'>下</font>的 class 属性值为 centent 的 div 子节。

数据加载

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
from pandas import Series, DataFrame
df = pd.read_excel('北京租房数据汇总.xlsx')

df_东城 = df.loc[0:780]
df_丰台 = df.loc[781:1894]
df_亦庄开发区 = df.loc[1895:2396]
df_大兴 = df.loc[2397:2933]
df_昌平 = df.loc[2934:3735]
df_朝阳 = df.loc[3736:6509]
df_海淀 = df.loc[6510:8487]
df_石景山 = df.loc[8488:8681]
df_西城 = df.loc[8682:9888]
df_通州 = df.loc[9889:11017]
df_顺义= df.loc[11018:11522]

数据概览,先对该区域的租房整体情况有个认识,看到 Price 指标的下界为 5000 左右,上界接近于 30000,中位数为 10000 出头,但是我们也看到有一个大于 80000 的超级异常值,我们利用截尾均值对他进行替代。

2.1 “主干” —— 选取节点

抓取信息,我们需知道要从哪里开始抓取。因此,需要找个起始节点。Xpath 选择起始节点有以下可选:

表达式 描述
nodename 选取标签节点的所有子节点。
/ 从根节点选取,html DOM 树的节点就是 html。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选择当前节点,一般用于二级提取。
.. 选取当前节点的父节点,在二级提取时用到。
@ 选取属性。

我们通过以下实例来了解其用法:

路径表达式 描述
xpath('//div') 选取 div 元素的所有子节点。
xpath('/div') 选取 div 元素作为根节点。如果同级有多个 div ,那么所有 div 都会被选为根节点。
xpath('/div/span') 选取属于 div 元素<font color='red'>下</font>所有 span 元素节点。如果 span 有多个,也会被选中。
xpath('//div') 选取所有 div 元素节点,不管它们在文档的位置。
xpath('//div/span') 选取 div 元素<font color='red'>下</font>的所有 span 元素节点,不管位于 div 之下的什么位置
xpath("//@[class='content']") 选取包含属性 class 的值为 content 的节点,不管是 div 元素还是其他元素
xpath("//@[id='center']") 选取属性 id 的值为 center 的节点,不管是 div 元素还是其他元素

如果你对于提取节点没有头绪的时候,可以使用通配符来暂时替代。等查看输出内容之后再进一步确认。

路径表达式 描述
xpath('/div/*') 选取 div 元素节点<font color='red'>下</font>的所有节点
xpath('/div[@*]') 选取所有带属性的 div 元素节点
不同区域租房数量直方图

对北京东城,西城等11个区的房源数量进行统计,并绘制直方图:

index = np.arange(11)
values = [440, 846,1451,1229,920,168,1011,625,457,389,393]
plt.bar(index,values)
plt.xticks(index, ['东城', '西城', '朝阳', '海淀', '丰台', '石景山', '通州', '昌平', '大兴', '亦庄开发区', '顺义'],rotation=45)
plt.title('各区房源数量')
plt.xlabel('各区域')
plt.ylabel('房源数量')
plt.show()

图片 1

结论:

  1. 链家网整租房源供应中,朝阳区、海淀区、通州区的房源供应量最多;石景山房源最少。
  2. 通过房源供应量的分析,北京租房主要区域为:朝阳区,海淀区

我们这里着重以第一种为主,先选择距离最近的几个区域,然后在这几个区域内进行选择。

1 Xpath 和 lxml

  • Xpath

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。

Xpath 原本是用于选取 XML 文档节点信息。XPath 是于 1999 年 11 月 16 日 成为 W3C 标准。因其既简单方便又容易,所以它逐渐被人说熟知。

  • lxml

lxml 是功能丰富又简单易用的,专门处理 XML 和 HTML 的 Python 官网标准库。

各区单位面积价格表
区域 单位面积价格(元/平米)
东城 112
西城 110
朝阳 89
海淀 100
丰台 75
石景山 72
通州 46
昌平 51
大兴 50
亦庄开发区 46
顺义 46

在爬取链家网的信息的时候用的是 Xpath 库,这里对 Xpath 库做一个简单的介绍。

2.3"绿叶" —— 节点内容以及属性

到了这一步,我们已经找到所需内容的节点了。接下来就是获取该节点中的内容了。Xpath 语法提供了提供节点的文本内容以及属性内容的功能。

路径表达式 描述
text() 获取节点的本文内容
@属性 获取节点的属性内容

具体用法见以下实例:

路径表达式 描述
xpath('./a/text()') 获取当前节点<font color='purple'>中</font> a 元素节点<font color='red'>中</font>的本文内容
xpath('./a/@href') 获取当前节点<font color='purple'>中</font> a 元素节点<font color='red'>中</font>的 href 属性的内容
计算单位面积价格
a = df_东城['price'].sum()
b = df_东城['area'].sum()
c = a/b
#以此类推

原文来自微信公众号:51CTO技术栈

3 lxml 的用法

数据分析

按 PV 进行降序,我们可以看出哪些房源是比较受欢迎,这些房源都有啥特征。

3.1 安装 lxml

pip 是安装库文件的最简便的方法,具体命令如下:

pip install lxml
# 如果出现因下载失败导致安装不上的情况,可以先启动 ss 再执行安装命令
# 或者在终端中使用代理
pip --proxy http://代理ip:端口 install lxml

数据清洗

#本项目只考虑租价在0——8000元,租房面积在0——120平米范围的房子,其余排除
df_东城=df_东城.loc[df_东城['price'] <= 8000]
df_丰台=df_丰台.loc[df_丰台['price'] <= 8000]
df_亦庄开发区=df_亦庄开发区.loc[df_亦庄开发区['price'] <= 8000]
df_大兴=df_大兴.loc[df_大兴['price'] <= 8000]
df_昌平=df_昌平.loc[df_昌平['price'] <= 8000]
df_朝阳=df_朝阳.loc[df_朝阳['price'] <= 8000]
df_海淀=df_海淀.loc[df_海淀['price'] <= 8000]
df_石景山=df_石景山.loc[df_石景山['price'] <= 8000]
df_西城=df_西城.loc[df_西城['price'] <= 8000]
df_通州=df_通州.loc[df_通州['price'] <= 8000]
df_顺义=df_顺义.loc[df_顺义['price'] <= 8000]

df_东城=df_东城.loc[df_东城['area'] <= 120]
df_丰台=df_丰台.loc[df_丰台['area'] <= 120]
df_亦庄开发区=df_亦庄开发区.loc[df_亦庄开发区['area'] <= 120]
df_大兴=df_大兴.loc[df_大兴['area'] <= 120]
df_昌平=df_昌平.loc[df_昌平['area'] <= 120]
df_朝阳=df_朝阳.loc[df_朝阳['area'] <= 120]
df_海淀=df_海淀.loc[df_海淀['area'] <= 120]
df_石景山=df_石景山.loc[df_石景山['area'] <= 120]
df_西城=df_西城.loc[df_西城['area'] <= 120]
df_通州=df_通州.loc[df_通州['area'] <= 120]
df_顺义=df_顺义.loc[df_顺义['area'] <= 120]

本次分析只考虑租价在0——8000元,租房面积在0——120平米范围的房子,原数据11523条,符合条件的有7999条数据,除过地铁距离数据缺失,其余数据完整度好,基本没有缺失。

进一步分析

前面的文章,我们已经学会正则表达式以及 BeautifulSoup库的用法。我们领教了正则表达式的便捷,感受 beautifulSoup 的高效。本文介绍也是内容提取的工具 —— Xpath,它一般和 lxml 库搭配使用。所以,我称这两者为“干将莫邪”。

目的

分析影响整租租价的因素
影响房屋出租价格的因素有很多,例如:朝向、装修类型、户型、采光性、通风性、地理位置、楼层、供求关系等。由于收集到的数据字段的局限性,本次分析仅分析了四个方面,即房源数量分布,区域、面积、楼层

关于房屋大小,中位数为 100 平,这与 Price 中位数正好可以对应,折算下来相当于 1 平 100 大洋,在与那些 10 平左右的合租房需要 2000+ 大洋比一比,是不是觉得还是 100 平 10000 大洋便宜哈。

2 Xpath 的语法

正则表达式的枯燥无味又学习成本高,Xpath 可以说是不及其万分之一。所以只要花上 10 分钟,掌握 Xpath 不在话下。Xpath 的语言以及如何从 HTML dom 树中提取信息,我将其归纳为“主干 - 树支 - 绿叶”。

思考总结:

这次对链家网租房分析比较简单,自己只分析了房源,面积,区域,楼层这几个方面,实际对租房的考虑因素远不止这几个方面,还有距离地铁远近,朝阳,通风,房东,小区环境等多个因素。
这次分析的主要难点是数据的清洗和python工具的使用,对数据分析的思维能力还有欠缺,得加强这方面的学习。

因为距离是按 Region 来进行计算的,而表是按 Name 来统计的,所以要想计算出距离最近的 Region,需要先把 Region 和 Distance 部分提取出来,并合并成一个 DataFrame。

3.2 使用 lxml

lxml 使用起来是比较简单的。我们首先要使用 lxml 的 etree 将 html 页面进行初始化,然后丢给 Xpath 匹配即可。具体用法如下:

from lxml import etree

html = requests.get(url)           # 使用 requests 请求网页
selector = etree.HTML(html.text)
content = selector.xpath('//a/text()')

没错,就这短短几行代码即可完成信息提取。
值得注意的是:xpath 查找匹配返回的类型有可能是一个值,也有可能是一个存放多个值的列表。这个取决于你的路径表达式是如何编写的。


上篇文章:详解 Requests 库的用法
推荐阅读:Python 多进程与多线程


2.不同区域对价格的影响

通过对东城、西城等11个区域的面积和价格进行统计计算,计算出出各区域单位面积价格表

再次通过 df.info() 看出,该是数字类型的指标全部变成了 int/float 了,可以进行下一步了。

3.面积对价格的影响

毫无疑问,面积对租房的价格起着决定性的因素,但不同区域的面积与价格的相关性如何?

图片 2

相关性查询表

df_顺义['price'].corr(df_顺义['area'])
区域 相关系数 相关性
东城 0.61
西城 0.56
朝阳 0.46
海淀 0.45
丰台 0.71
石景山 0.75
通州 0.54
昌平 0.44
大兴 0.57
亦庄开发区 0.52
顺义 0.52
  1. 总体上来看,面积和价格相关性较强
  1. 丰台区面积与价格的相关性最强

实现思路就是:先抓取房源信息,然后获取房源的经纬度,最后根据经纬度计算公司与具体房源之间的距离。

4.楼层对价格的影响

违建的公寓正在消失,危房出租正在被拆,这些被“风暴”涉及到的外来上班族怎么办?只有接受现实,勇敢面对。

折线图
import matplotlib.pyplot as plt
names = ['东城', '西城', '朝阳', '海淀', '丰台', '石景山', '通州', '昌平', '大兴', '亦庄开发区', '顺义']
x = range(len(names))
y = [112, 110,89,100,75,72, 46,51,50,46,46]
plt.ylim( 0, 120 )
plt.plot(x, y, 'ro-')
plt.xticks(x, names, rotation=45)
plt.margins(0.08)
plt.subplots_adjust(bottom=0.15)
plt.title('各区域单位面积价格')
plt.xlabel('区域')
plt.ylabel('单位面积价格')
plt.show()

不同区域单位面积价格折线图:

图片 3

结论:

  1. 从不同单位面积价格折线图来看,在西城和东城租房对支付能力要求最高
  2. 通州,昌平, 大兴,亦庄开发区,顺义对支付能力要求相对较低
  3. 海淀区相对于朝阳区对支付能力的要求更高
  4. 对于刚来北京求职的人员,通州,昌平,大兴这几个区域租房是不错的选择,价格相对较低

区域对比
对区域之间进行比较,以海淀区和朝阳区的单位面积价格进行比对为例,探究海淀区对支付能力要求更高的原因

分别对不同区域价格和面积做箱线图

聚集着几万外来务工人员的新建村在几天之内被清理一空。很多人正面临着要重新找房子或是离开北京的问题。

技术工具

利用八爪鱼爬取数据,excel表对数据进行预处理,worldart制作词云,数据分析部分主要使用python中的pandas库作为数据整理和统计分析的工具,matplotlib库用于可视化展示

我们刚刚只是获取了一些出租房的基本信息,但是我们要想计算距离还需要获得这些出租房所在的地理位置,即经纬度信息。

楼层分布
df=df.loc[df['price'] <= 8000]

df=df.loc[df['area'] <= 120]
df_storey_0_6=df.loc[(df['storey'] <=6) , 
        ['area','storey','price']]
df_storey_7_13=df.loc[(df['storey'] > 6) & (df['storey'] <= 13), 
        ['area','storey','price']]
df_storey_14_20=df.loc[(df['storey'] > 13) & (df['storey'] <= 20), 
        ['area','storey','price']]
df_storey_21_27=df.loc[(df['storey'] > 20)& (df['storey'] <= 27) , 
        ['area','storey','price']]
df_storey_28_n=df.loc[(df['storey'] > 26) , 
        ['area','storey','price']]
labels = ['0-6', '7-13 ','14-20', '21-27','28_n']
values = [df_storey_0_6.iloc[:, 0].size,df_storey_7_13.iloc[:, 0].size,df_storey_14_20.iloc[:, 0].size,df_storey_21_27.iloc[:, 0].size,df_storey_28_n.iloc[:, 0].size]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral','cyan']
plt.pie(values, labels = labels, colors = colors, startangle = 45, shadow = True, autopct = '%1.1f%%')
plt.axis('equal')
plt.title('不同楼层数量比例')
plt.show()

图片 4

楼层 单位面积房价
0-6层 73
7-13层 72
14-20 80
21-27 78
26-n 76
import matplotlib.pyplot as plt
names = ['0-6', '7-13', '14-20', '21-27','28-n']
x = range(len(names))
y = [73,72,80,78,76]
plt.ylim( 50, 100)
plt.plot(x, y, 'go-')
plt.xticks(x, names, rotation=45)
plt.margins(0.08)
plt.subplots_adjust(bottom=0.15)
plt.title('楼层与价格(元/平米)走势图')
plt.xlabel('楼层')
plt.ylabel('单位面积价格')
plt.show()

图片 5

关系 相关系数 相关性
价格与楼层 0.2 弱相关

结论:

  1. 北京区域,整租房屋主要以高层居多
  2. 1~6层的房屋出租数量占42.1%,7~13层的房屋出租数量占15.3%,14~20层的房屋出租数量占23%,21~28层的房屋出租数量占13.7%但28及28层以上的房屋出租数量仅占5.8%。
  3. 楼层与价格的呈弱相关,14层以上平均价格随着楼层的增加总体呈现递减的趋势

图片 6

户型

结论:
2室1厅的房源供应量最多

房屋修建时间也是 2003 年以后的居多,这就和前面的楼层类型可以对应上了,在刚开始的时候大部分房子都是低楼层,随着时代的进步,科技的发展,人员的增多,楼层的数量和房屋的数量也随之增加。

目录

  • 简介
  • 技术工具
  • 目的
  • 数据来源和数据集
  • 数据加载和清洗
  • 数据分析
    • 链家房源数量分布
    • 不同区域对租房价格的影响
    • 面积与价格的相关性分析
    • 楼层与价格之间的关系
    • 户型分布
  • 分析结论
  • 思考总结

注:本次的数据为链家网的整租房源信息,非合租信息,所以你会看到价格都很高。

简介:

作为一个刚来北漂的青年,第一个难题就是租房居住,自己对北京地理分布和租房价格没有了解,因此自己爬取了北京链家网的租房信息,希望通过数据分析能够对北京整体租房信息有一个基本的了解

结论

1.房源

对小区名进行词云分析

图片 7

小区房源

结论:
通过词云可以发现,房源较多的小区有:荣丰2008、佳和艺园、远洋山水、怡馨家园、建新南区等

通过上图可以看出,我们一共抓取到 2970 条房屋信息,9columns。

箱线图

图片 8

图片 9

结论:
海淀区租房价格总体分布与朝阳区差别不明显
海淀区租房面积总体分布相比于朝阳区低

对于海淀有一个因素对供需影响非常大——学校。中关村聚集着全国20多所高校,学校周围租房人数多,且海淀区包含圆明园,颐和园,香山公园等多个公园。综合来看,海淀比朝阳区对支付能力要求相对较高。

我们本次抓取数据的流程是先获得目标网页 url,然后利用 requests.get() 获得 html,然后再利用 lxml 库中的 etree.HTML(html) 进行解析得到一个对象 dom_tree,然后利用 dom_tree.Xpath() 方法获取对应的信息。

箱线图
#价格箱线图
data_to_plot = [df_东城['price'], df_西城['price'],
                df_朝阳['price'],df_海淀['price'],df_丰台['price'],df_石景山['price'],df_通州['price'],df_昌平['price'],
                df_大兴['price'],df_亦庄开发区['price'],df_顺义['price']]

fig = plt.figure(1, figsize=(12, 6))
ax = fig.add_subplot(111)
bp = ax.boxplot(data_to_plot)
ax.set_xticklabels(['东城', '西城', '朝阳', '海淀', '丰台', '石景山', '通州', '昌平', '大兴', '亦庄开发区', '顺义'],rotation=45)
fig.savefig('fig1.png', bbox_inches='tight')
plt.title('价格箱线图')
plt.xlabel('各区域')
plt.ylabel('租房价格')
plt.show()
# 面积箱线图
data_to_plot = [df_东城['area'], df_西城['area'],df_朝阳['area'],df_海淀['area'],df_丰台['area'],
                df_石景山['area'],df_通州['area'],df_昌平['area'],df_大兴['area'],df_亦庄开发区['area'],df_顺义['area']]
fig = plt.figure(1, figsize=(12, 6))
ax = fig.add_subplot(111)
bp = ax.boxplot(data_to_plot)
ax.set_xticklabels(['东城', '西城', '朝阳', '海淀', '丰台', '石景山', '通州', '昌平', '大兴', '亦庄开发区', '顺义'],rotation=45)
fig.savefig('fig1.png', bbox_inches='tight')
plt.title(u'面积箱线图')
plt.xlabel(u'各区域')
plt.ylabel(u'租房面积')
plt.show()

得到目标网页的 url 后,对其进行解析,采用的方法是先用 lxml 库的 etree 对 response 部分进行解析,然后利用 Xpath 进行信息获取。

数据来源和数据集

本项目所使用的数据全部是来北京链家
数据下载地址: 链家租房数据
选择链家网的租房数据,是因为链家网是国内较大的房产服务平台, 用户口碑好,数据相对可靠
本次爬去数据的依据及获取的数据有:

区域 内容 字段 租房方式
东城 小区名 location 整租
西城 户型 zone
朝阳 面积(平米) area
海淀 朝向 where
丰台 楼层 storey
石景山 房龄(年) year
通州 最近地铁距离(米) subway
昌平 租价(元/月) price
大兴
亦庄开发区
顺义

最后将距离以及区域与对应的小区拼接在一起,得到下面的结果。

特别说明

北京链家网的整租业务在房山,平谷,怀柔等区的数据较少或没有,因此没有对这些区域进行分析

通过 df.info() 可以看出,总共有 2454 条数据,这是在爬虫获取的 2970 条数据去重以后得到的。

分析结论:

在面积小于120平米,租房价格小于8000元的条件下

  1. 北京链家租房房源分布主要集中在朝阳区和海淀区
  2. 北京西城和东城租房对支付能力的要求最高,单位面积房价110元/平米左右
  3. 海淀区相对于朝阳区对支付能力要求高
  4. 对于收入不高的人群,通州,昌平,大兴这几个区是不错的选择
  5. 租房面积是影响租房价格的最主要因素
  6. 整租房屋楼层分组中,1-6层占42.1%,整租房屋以高层居多
  7. 14层以上的房屋,单位面积随着楼层的增加总体呈递减趋势
  8. 楼层对租房价格的影响较弱
  9. 整租房屋中,以户型为两室一厅的房源最多

Xpath 介绍

Xpath 最常用的几个符号就是“/”、“//”这两个符号,“/”表示该标签的直接子节点,就比如说一个人的众多子女,而“//”表示该标签的后代,就比如说是一个人的众多后代(包括儿女、外甥、孙子之类的辈分)。

Xpath 怎么用

更多详细内容这里就不 Ctrl C/V了。

2003 年以前的房源的价格是要低于 2003 年之后的,对价格敏感的可以考虑 2003 年以前的房源。有一些三室的房子价格是低于两室的,如果对房间数量和价格都有要求的可以考虑这部分。中楼层的价格整体上是要高于低楼层的,但是还有一部分是要比低楼层低,而且通过从 PV 最高的楼层来看,低楼层的火爆程度要比中楼层高,所以可以寻找那些不那么火爆但是价格还低的中楼层。如果希望单位面积价格最低,还是整租比较合适。

在找房子的过程中我们最关心是价格和通勤距离这两个因素。关于价格方面,现在很多租房网站都有,但是这些租房网站上没有关于通勤距离的衡量。

站在技术人的角度,今天我就如何从各大租房网的房源里面,找到最称心如意的小窝做些分享,供大家参考。

这里我准备获取标题、价格、区域(大概在哪一块)、看房人数,楼层情况,房租建筑时间等等。。

通过上图可以看出:中楼层和高楼层的房源绝对数量基本持平,高出低楼层数量一半。

先找出那个大于 80000 的异常值具体值是多少,然后进行值替换。

当然了,对于现在租房都很困难的环境下,哪还考虑什么宜居,当然是挑价格低的房型。

所以论一平米的价格的话还是整租更便宜。

得到如下的结果(LATB 表示维度,LNGB 表示经度):

开始代码部分:

主要是距离,关于距离,有两种选择方式,一种是先选出离你上班地最近的几个区域,然后再在该区域内具体选择;另一个是可以设定你可以接受的通勤距离,然后以这个距离作为条件,在小于等于这个距离内进行筛选。

我们把后缀去掉了,Size、third_feature 和 Distance 看上去是数字,但是通过 df.info() 看出,这两个指标类型依然是 Object。为了进一步分析,我们要对它们继续进行处理。

作者:张俊红

关于如何获取对应地点的经纬度信息,这里利用的 XGeocoding_v2 工具:

从图中可以看到,低楼层的房源数量不是最多的,但是看房次数却是最多的,可能是低楼层价格低的原因吧。

获取经纬度信息的地址如下:

通过上图可以看到三个楼层的价格下界基本持平,但是中楼层的中位数和上界价格是要明显高于其他两个房型的,这也很正常,中楼层相比于其他两个楼层的房屋是最宜居的啦,价格贵也正常。

11 月 18 日,北京西红门镇新建二村“聚福缘公寓”突发火灾。火灾后,随之而来的是一场全北京市的“安全隐患大排查大清理大整治”风暴。

房屋类型上的 Top3 类型分别为:2 室 1 厅、3 室 2 厅和 1 室 1 厅。

Xptah 是什么

通过上图可以看出,随着时间的推移,2003 年以后的房子的 Price 要明显高于 2003 年以前的,如果要是对价格比较敏感,可以考虑 2003 年以前的房子。

对于我这种对帝都不是很熟的人,对各个区域的位置更是一脸懵逼。所以我就想着能不能自己计算距离呢,后来查了查还真可以。

随着房屋类型的升级,价格也是随之升高,但是我们也发现,有一些三室房子的价格要低于两室的价格的,如果对房间数量和价格都有要求的可以考虑这部分房源。

在文章刚开头就说过,一般租房最看重的两个因素就是距离价格,价格可以直接在那些租房网上看到,肯定是越低越好,没啥好说的。

距离的计算

2003 年和 2007 的房源 PV 最高,这和该年代的房源绝对数量基本维持一致;两室一厅的户型最为火爆;在价格方面 10000 以下的房源比较受欢迎。

通过上面的分析我们可以得出一些参考:

通过上表可以看到在望京区域总共有 101 套房源,接下来对这 101 套房源进行深入分析。

Xpath 在查找信息的时候,需要先对 requests.get() 得到的内容进行解析,这里是用 lxml 库中的 etree.HTML(html) 进行解析得到一个对象 dom_tree,然后利用 dom_tree.Xpath() 方法获取对应的信息。

租房的烦恼,相信大家或多或少都有过。独自一人在大都市打拼,找个温暖的小窝实属不易,租个称心又价格公道的房子是件重要的事儿。

还有就是明确我们要获取的信息,在前面我们说了目标是要研究公司附近的出租房信息,但是我们在租房的时候也不是仅仅考虑距离这一个因素。

这是将 Price 异常值处理以后得到的箱型图,看起来就比较规范了哈。

先分析目标网页 url 的构造,链家网的 url 构造还是很简单的,页码就是 pg 后面的数字,在租房这个栏目下一共有 100 页,所以我们循环 100 次就好啦。

我们在获取经纬度之前,首先需要获取各个出租房所在地的名称,这里获取的方法是用爬虫爬取链家网上的信息。

Xpath 是一门在 XML 文档中查找信息的语言。Xpath 可用来在 XML 文档中对元素和属性进行遍历。

数据抓取

在这些项中,size、second_feature 以及 third_feature 均带有单位,为了后续分析方便,这里统一进行去单位操作。

这里的经纬度是获取的区域层级的,即大概属于哪一个片区,本次爬取的 2970 条房屋信息分布在北京的 208 个区域/区域。

经纬度的获取

本文由澳门威斯尼人平台登录发布于服务器&运维,转载请注明出处:技术人如何用Python找到房源信息,对链家网租房进行分析

相关阅读