zoukankan      html  css  js  c++  java
  • 干货!链家二手房数据抓取及内容解析要点

    本文对链家官网网页进行内容分析,可以作为一般HTTP类应用协议进行协议分析的参考,同时,对链家官网的结构了解后,可以对二手房相关信息进行爬取,并且获取被隐藏的近期成交信息。


    另外,近期将对包含登录帐号密码的某网站HTTP协议数据进行分析,敬请期待。


    作为全国知名的房产中介,链家网站上的二手房交易数据比较全面,可以作为对房产热度进行分析的一个参考资料。

    0?wx_fmt=png



    01



    链家网站总体情况


    链家全站HTTPS,无法并行抓包对用户数据进行协议还原,但可采用其它手段,如爬虫等技术对网站数据进行监控。


    整个网站的首页为https://www.lianjia.com,内含一系列子站链接,无其它有价值信息,各个城市子站点内数据是我们要分析的主要目标。


    我们关注二手房的成交数据,以及挂牌在售数据,因此选取一个子站点cd.lianjia.com对相关数据进行分析,其它子站分析方式类似。


    整个子站点挂牌数及成交数很大,遍历不便。但行政区数量有限,只有几个,每个行政区下分成数百数千小区,每个小区有各自的成交数据及在售数据,数据比较规范,可以按统一规律进行数据组织。


    02


    网站结构及内容分析


    按照从总到分的顺序逐步遍历网站数据。


    1、从小区查找的首页提取各行政区URL。

    0?wx_fmt=png

    基础URL为https://cd.lianjia.com/xiaoqu/

    下面包含19个行政区。

    在这个页面提取到各个行政区域的URL。


    0?wx_fmt=png


    对页面内容分析的关键是找到确定内容位置的唯一标识符,很显然,data-role="ershoufang"属性描述的div是唯一的,里面可以获取每个行政区的url以及行政区名。



    2、访问每个行政区URL,获取小区总页数



    0?wx_fmt=png


    小区数量很多,有很多页,需要一页一页提取,因此需要总结出每一页的URL规律,获取总页数和小区列表每页的url拼接方法。


    0?wx_fmt=png


    而class="page-box house-lst-page-box"描述的div内,包含了page-data="{"totalPage":38,"curPage":1}",总页面数38,以及小区列表每页URL的拼接方法page-url="/xiaoqu/jinjiang/pg{page}/",即页面为从cd.lianjia.com/xiaoqu/jinjiang/pg1/到cd.lianjia.com/xiaoqu/jinjiang/pg38/。

    其它区域内小区列表页面类似,只需改变URL内的jinjiang为对应区,最后的数字改为对应的页面即可。


    3、遍历行政区URL下的分页,提取各个小区的URL以及部分有价值信息。


    0?wx_fmt=png


    小区列表内可以提取到小区的属性,如位置,区域,修建时间以及均价在售套数,另外,还有关键的小区url


    从html中可以看到,小区信息在class="listContent"描述的ul内,具备唯一性,而每个小区的描述占一个li,循环遍历即可提取到各项小区信息。


    在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此不做详述。


    各个小区均有一个唯一编号,即URL内的第三段内容,如cd.lianjia.com/xiaoqu/3011056075583/表示的小区编号为3011056075583



    4、根据每个小区的URL,构造成交记录列表URL和在售二手房列表URL。


    对一个小区URL如cd.lianjia.com/xiaoqu/3011056075583/,其成交记录列表URL为cd.lianjia.com/chengjiao/c3011056075583/,在售二手房列表URL为cd.lianjia.com/ershoufang/c3011056075583/,在这两个页面,可获取到成交记录总页面数和在售列表总页面数以及构造分页的规律,即各个分页的URL分别为cd.lianjia.com/chengjiao/pg{1-x}c3011056075583/和cd.lianjia.com/ershoufang/pg{1-x}c3011056075583/,其中的{1-x}用页面值代替即可。


    5、逐页访问成交记录列表URL页面,可获取全部成交房源URL。

    0?wx_fmt=png

    成交列表页面包含了每一套成交房源信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌价,成交周期,成交日期,成交总价,成交单价等信息,但最近成交的价格数据被隐藏,需要到房源页面获取。


    0?wx_fmt=png


    从html中可以看到,成交房源信息在class="listContent"描述的ul内,具备唯一性,而每个房源的描述占一个li,循环遍历即可提取到各项房源信息。


    在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此同样不做详述。


    各个房源的URL在class="title"的div内的href属性值内。


    6、访问成交房源URL,获取单个房源的详细信息。

    0?wx_fmt=png

    进入单个成交房源页面,可以看到完整信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌价,成交周期,成交日期,成交总价,成交单价等更丰富的信息,包括基本属性和交易属性。

    0?wx_fmt=png

    基本信息内的基本属性和交易属性与在售房源内基本相同,所以二者在提取时相互借鉴。



    0?wx_fmt=png

    在房源标题div内可以提取到房源小区信息,其余信息可在其它位置提取到更详细数据,在此处忽略。


    0?wx_fmt=png


    在class="wrapper"的section内,为总价,单价,挂牌价等信息。按各自的class提取即可。


    0?wx_fmt=png

    房屋的基本属性和和交易属性在class="newwrap baseinform"的div内的class="introContent"的div内,分成两个div,分别为class="base"及class="transaction"。然后依次提取即可。



    7、访问在售二手房列表URL,获取全部在售房源URL。

    0?wx_fmt=png

    在售列表页面包含了每一套房源信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌总价,挂牌单价等信息,但更详细的信息,需要到房源页面获取。



    0?wx_fmt=png

    从html中可以看到,在售房源信息在class="sellListContent"描述的ul内,具备唯一性,而每个房源的描述占一个li,循环遍历即可提取到各项房源信息。


    在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此同样不做详述。


    各个房源的URL在class="title"的div内的href属性值内。



    8、访问在售房源URL,获取单个房源的详细信息

    0?wx_fmt=png


    进入单个在售房源页面,可以看到完整信息,包括小区,房型,建筑面积,套内面积,朝向,装修,电梯,楼层,年代,税费,挂牌总价,挂牌单价等更丰富的信息,包括基本属性和交易属性。

    0?wx_fmt=png


    基本信息内的基本属性和交易属性与成交房源内基本相同,所以二者在提取时相互借鉴。



    0?wx_fmt=png

    在房源标题div内可以提取到房源小区信息,其余信息可在其它位置提取到更详细数据,在此处忽略。


    0?wx_fmt=png

    在class="overview"的div内,为总价,单价等信息。按各自的class提取即可。


    0?wx_fmt=png

    房屋的基本属性和和交易属性在class="newwrap baseinform"的div内的class="introContent"的div内,分成两个div,分别为class="base"及class="transaction"。然后依次提取即可。



    对所有信息进行提取后,整合即可存入数据库中供使用。



    03


    数据抓取




    使用Python及BeautifulSoup库,可以很方便地爬取数据。

    Python及BeautifulSoup安装可以参考之前的文章:

    Windows下Python 3.6 安装BeautifulSoup库


    通过前一节的分析,可知整个抓取过程如下:


    首先,从入口页面提取城市的各区URL。

    第二步,获取各小区的URL,并获取小区信息存数据库。

    第三步,根据小区URL生成在售页面URL及成交页面URL。

    第四步,提取小区在售房源URL,对房源信息分析获取有价值信息存数据库。

    第五步,提取小区成交房源URL,对房源信息分析获取有价值信息存数据库。


    为加快速度,应采用多线程方式。



    如有疑问可联系我进行探讨,有一个简单的房源爬虫可以提供。



    0?wx_fmt=jpeg

    长按进行关注






  • 相关阅读:
    AQS的子类在各个同步工具类中的使用情况
    SpringBoot RabbitMQ 延迟队列代码实现
    Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
    Java内存模型,为啥线程要有自己的本地内存,CPU高速缓存
    Java内存模型中volatile关键字的作用
    Java内存模型、JVM内存结构和Java对象模型
    搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
    MongoDB导出与导入远程Linux服务器上的数据
    DeferredResult使用方式和场景
    【IT笔试面试题整理】二叉树中和为某一值的路径--从根到叶子节点
  • 原文地址:https://www.cnblogs.com/protosec/p/11673368.html
Copyright © 2011-2022 走看看