多少人和你一起找房子?
毕业季,越来越多的同学要租房子了。朋友圈里在深圳找房子的人越来越多,好奇之下,我翻看了深圳市统计局给出的统计年鉴。
从统计结果来看,深圳市目前常住人口中有一多半是非户籍人口。
果不其然,不能怪朋友圈找不到合适房子的朋友太矫情,在深圳和这么多人抢房子确实是个大难题。
因为对目前租房市场的情况感到好奇,我爬取了链家网深圳网站的租房信息。获取到三万多条房源信息,其中有很大一部分来自于集体式公寓和职业房东。
接下来我会对爬取的过程和结果做一点分析。
深圳链家网页面解析
爬取思路
链家网的搜索结果只会显示100页,所以我们无法通过直接访问来获取全部房源信息。
所以我们采取了迂回策略:
- 组合不同搜索条件,获取搜索结果,保证加起来是全部结果
- 访问不同结果下的所有页面,获取结果列表中的基本信息
- 访问房源页面,获取全部信息
- 对数据进行清洗去重
分析搜索条件下的url
我们点击几种搜索条件,并且随便输入一个搜索关键词,点击搜索按钮可以获取网页完整的url。
这里我们对url结构进行分析,前面的协议和域名部分https://sz.lianjia.com/zufang/
可以不管
重点看pg2f100500000001l1rs%E5%8D%97%E5%B1%B1/#contentList
其中pg2
代表搜索条件的第二页结果,f100500000001
代表朝东,l1
代表两居室rs%E5%8D%97%E5%B1%B1
是UTF8编码下的搜索关键词“南山区”,后面的#contentList
是必须要加的,代表搜索结果界面。
我们在这个页面中也可以看到搜索结果有多少,如果小于3000条,说明这个搜索条件可以使用。我们要做的就是组合不同的搜索条件来达到爬取全部房源的目的。
在这里我采用的是价格和朝向组合的方式。一共使用了7个不同的价格区间,8个不同的朝向。也就是56个搜索条件,一共获取了33427条数据。
分析搜索结果页面
打开网页源代码,我们可以在<div class="content__list--item--main">
标签下找到所有搜索结果的页面。
我们可以在这里获取到本页所有搜索结果的房源信息。
因为这个信息远远不够,所以在这个页面我们只取最关键的房源链接和房源页中没有的行政区位置信息就够了。
因为链家网每页结果显示30个房源,所以我们还需要分页查询。通过页面内的已为您找到XXXX套可以计算出总的页面数,通过调整url中的p2
字段就可以翻页了。
分析房源页面
拿到房源页面以后,我们可以直接访问这个房源的主页面。
链家的房源链接有两种:
- 公寓类房源:https://sz.lianjia.com/apartment/example.html
- 直接租赁房源:https://sz.lianjia.com/zufang/example.html
两种页面的结构不尽相同,这里我只会分析租赁类房源
打开房源页面,我们可以看到展示的有房源的基本信息。包括价格,图片,租赁方式,户型,朝向,面积,以及楼层等。在页面下方我们还能看到地图信息,也就是说这个页面内一定包含了经纬度。
打开源代码,找到对应的html标签。这些内容全部都有对应的标签对象,只要结合标签名和最多两个属性就可以准确定位,使用BeautifulSoup工具可以很方便地进行抓取。
爬虫代码构建
思路
- 获取所有房源的链接
- 指定基础搜索条件url,更换关键字段遍历所有条件结果,获取房源总数
- 通过房源总数计算页面数,遍历每一种条件下的每一个搜索结果页面
- 将获取到的房源地址,行政区位置信息储存到CSV文件
为了防止单个任务量过大,可以按搜索条件存成不同的CSV文件
- 获取房源信息
- 读取第一步中的CSV文件
- 遍历所有房源,分析房源页
- 将获取的结果存入CSV文件
- 结果存入数据库
- 读取第二步中的CSV文件
- 通过正则表达式等对数据进行进一步清洗
- 将结果直接MySQL数据库
- 利用数据库主键对结果进行去重
代码
代码本身以及最终的全部结果CSV文件我已经上传到个人网址和github
直达链接
这里只放部分截图和代码结构
主函数结构
1 | from bs4 import BeautifulSoup |
房源信息CSV文件
MySQL表结构
数据分析于可视化
这里主要用到的是由百度提供的开源工具Pyechart
具体的使用我打算另外写一篇文章。
所以这部分就暂时跳过了
分析结果
首先是深圳所有房源的分布热力图,因为新加了大鹏新区,整个地图看着有点怪怪的。
—-未完待续