最近由于工作突然变动,新的办公地点离现在的住处很远,必须要换房子租了。
我坐上中介的小电驴,开始探索城市各处的陌生角落。
在各个租房app之间周转的过程中,我属实有些焦头烂额,因为效率真的很低下:
首先,因为跟女友住在一起,需要同时考虑两人的上班路程,但各平台按通勤时长找房的功能都比较鸡肋,有的平台不支持同时选择多个地点,有的平台只能机械的取到离各个地点通勤时长相同的点,满足不了使用需求。
其次,站在一个租房人的立场,租房平台实在太多了,并且各平台筛选和排序逻辑都不太一致,导致很难将相似房源的信息进行横向比较。
但是没有关系,作为一名程序员,当然要用程序员的方法来解决问题了。于是,昨晚我用一个python脚本,获取了某租房平台上海地区的所有房源信息,一共2w多条:
下面就把本次爬数据的整个过程分享给大家。
分析页面,寻找切入点
首先进入该平台的租房页面,可以看到,主页上的房源列表里已经包括了我们所需要的大部分信息,并且这些信息都能直接从dom中获取到,因此考虑直接通过模拟请求来收集网页数据。
1 |
|
因此接下来就要考虑怎么获取url了。通过观察我们发现,该地区一共有2w套以上的房源,而通过网页只能访问到前100页的数据,每页显示数量上限是30条,算下来就是一共3k条,无法获取到全部信息。
不过我们可以通过添加筛选条件来解决这个问题。在筛选项中选择“静安”,进入到如下的url:
1 |
|
可以看到该地区一共有2k多套房源,数据页数为75,每页30条,理论上可以访问到所有的数据。所以可以通过分别获取各区房源数据的方法,得到该市所有的数据。
1 |
|
点击第二页按钮后,进入到了上面的url,可以发现只要修改pg后面的数字,就能进入到对应的页数。
不过这里发现一个问题,相同的页数每次访问得到的数据是不一样的,这样会导致收集到的数据出现重复。所以我们点击排序条件中的“最新上架”,进入到如下链接:
1 |
|
用这种排序方式获得的数据次序是稳定的,至此我们的思路便有了:首先分别访问每个小地区的第一页,然后通过第一页获取当前地区的最大页数,然后访问模拟请求访问每一页获取所有数据。
爬取数据
有了思路之后就要动手写代码了,首先我们要收集包含所有的链接,代码如下:
1 |
|
之后,我们要逐一处理上一步得到的urls,获取链接内的数据,代码如下:
1 |
|
整理数据,导出文件
通过对页面结构的观察,我们能得到每个元素存储的位置,找到对应的页面元素,就能获取到我们需要的信息了。
这里附上完整的代码,感兴趣的朋友可以根据自己的需要,替换掉链接中的地区标识和小地区的标识,就能够获取到自己所在地区的信息了。其他租房平台的爬取方式大都类似,就不再赘述了。
1 |
|
经过一番操作,我们获取到了当地各租房平台完整的房源信息。至此,我们已经可以通过一些基本的筛选方式,获取自己需要的数据了。
租房故事还没有结束,下一篇文章里,我们再来谈谈如何利用python从这几万条数据中,找到符合自己需要的房子。