简介

    首先打开相关网页(https://bj.lianjia.com/xiaoqu/)。

    注意:本博客的代码适用于爬取某个城市的小区房价信息。如需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多。


效果展示

    这是我之前在我CSDN博客(https://blog.csdn.net/Leaze932822995/article/details/108196379)上写的效果,当时还没添加查询POI数据和写入CSV的功能。

气象编程 | 基于Python获取链家小区房价信息及其POI数据-LMLPHP

    然后下面这个是后来修改完善后的导出效果。其中A-D列来源于链家,E到H列来源于百度地图。

气象编程 | 基于Python获取链家小区房价信息及其POI数据-LMLPHP


分析网页

    分析网页建构爬虫思路最重要的部分。对网页进行分析可以举一反三,不光可以获取本文主要谈论的小区房价信息,还可以自行拓展二手房、租房之类的房价信息。

    首先,用谷歌浏览器(最好是谷歌浏览器)打开北京链家小区信息(也可以打开其他城市的,这里用北京做个栗子)(https://bj.lianjia.com/xiaoqu/)。在这个页面上可以看到我们要爬取的信息,这次主要获取的有小区名、小区位置、房价。

气象编程 | 基于Python获取链家小区房价信息及其POI数据-LMLPHP

    进入页面后Ctrl+U或者右键查看网页源代码,在源代码界面Ctrl+F搜索小区名(也可以搜索其他的关键字信息)定位到相关的代码处。经过简单的目视观察,我们就可以定位到我们所需要的所有信息(链家的数据还是蛮好爬取的……

气象编程 | 基于Python获取链家小区房价信息及其POI数据-LMLPHP

    在Python中获取该页面所有的源代码文本信息的代码如下,这里用到了requests库。下面代码中的变量html里面装的就是该页面的所有源代码。


    然后在网页中把我们要获取的数据的前后的代码块复制一下,按照正则表达式(用到re库)的规则整理一下。下面这个代码的意思就是在html(也就是源代码)中通过我们所需要的数据的前后代码定位到我们所需要的数据,并且获取数据,分别传入变量name、price、district、bizcircle中。

    好了,到这里,基本的分析和数据的获取代码已经完成了,接下来就是要整理获取到的数据,并且实现批量获取。


代码思路

    前文中网页的分析已经完成了,核心的爬取思路有了。

    接下来还需要完成的工作有:

        1. 实现爬虫的自动化,比如说自动翻页什么的。因为我们总不能就爬取一页吧,一页好像才30条房价信息……

        2. 把爬取到的n个页面整合到一起。

        3. 通过小区名字查询POI数据。

        4. 把查询到的POI数据和原来的房价数据整合到一起。

        5. 把房价数据和POI数据写入csv表中。


    先把需要的库导入。

    首先我们根据前文分析页面总结的代码先实现单页数据的爬取,并且把它封装成一个函数。

    该函数的思路是:传入链家某城市的小区房价的某个页面的url,读取该页面的源代码并且传入变量html,用正则表达式定位并且获取我们需要的数据并将其传入变量name、price、district、bizcircle中(这里传入的是列表形式),然后将其整理为字典。

    第二步是通过第一步的函数查询n个页面的数据(遍历),并且将n个页面获取的数据整合为一个字典。

    先写一个合并两个字典的函数放在这,等下用得着。

    然后回到原网页看看链家小区房价信息页面的翻页规则,发现只只需要在原来url后+pg+数字就能翻页。很简单,现在通过遍历的思路,写一个能够生成输入起始页和终止页之间所有url的函数即可,然后再把合并字典的函数放进去,就可以实现自动翻页并且整合房价数据。

    到上面,基本的房价信息已经获取完毕了。接下来第三步就是要通过小区的名字查询POI数据。

    我这里用的是百度的api接口,当然高德还是腾讯的也可以用,但是我还是百度的用得比较多,所以这里我就说下百度的方法。

    在之前,需要先获取百度地图开放平台(http://lbsyun.baidu.com/)的ak密钥,就是点进我的应用-创建应用。因为我很早之前获取的,具体的获取流程我也不太记得了,如果找不到获取可以自己上百度谷歌一下。

    获取了ak后,就可以通过百度地图的接口查询POI数据了,下面的函数也就能实现了。

    这个函数的意思是传入POI关键字参数Keyword和地区参数District,在地区District中搜索和Keyword相关的POI数据。在某些情况下的POI获取中,我们要的是n个与关键字相关的POI数据(比如我在北京市范围内搜索“银行”),但是由于在这个任务中我们是要检索特定的小区,那检索出来的POI数据基本是第一个没跑了(我还是相信百度……(主要是懒))。回到这个函数的代码,输入关键字和地区参数后,这个函数会返回名字name、地区Region、经度Longitude、纬度Latitude。

     第四步就是将所获取到的POI数据添加到原来的房价字典里。这一步的函数将上面的所有函数整合在一起。

    终于来到最后一步,第五步!这一步就是把所有数据写入csv存起来。写入csv的好处就是以后需要的话不用重新爬取,并且如果要做地理分析还是什么的话可以直接导入ArcGIS。

    这个函数就是添加了第四步的功能,并且用遍历字典的方法写入csv里(写入csv的方法很简单这里就不多说)。为了监测爬虫的情况,我这里import了datetime库看爬虫所需时间。

    接下来必不可少地要说说启动方法。我举个栗子,以北京为例,爬取1到20页的房价信息。

    然后我再举个栗子,以哈尔滨为例,爬取50到60页的房价信息。


完整代码




以下是乞讨内容

气象编程 | 基于Python获取链家小区房价信息及其POI数据-LMLPHP

本文分享自微信公众号 - 气象学家(Meteorologist2019)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

08-31 14:44