干货!链家二手房数据抓取及内容解析要点
“本文對鏈家官網網頁進行內容分析,可以作為一般HTTP類應用協議進行協議分析的參考,同時,對鏈家官網的結構了解后,可以對二手房相關信息進行爬取,并且獲取被隱藏的近期成交信息。”
另外,近期將對包含登錄帳號密碼的某網站HTTP協議數據進行分析,敬請期待。
作為全國知名的房產中介,鏈家網站上的二手房交易數據比較全面,可以作為對房產熱度進行分析的一個參考資料。
01
—
鏈家網站總體情況
鏈家全站HTTPS,無法并行抓包對用戶數據進行協議還原,但可采用其它手段,如爬蟲等技術對網站數據進行監控。
整個網站的首頁為https://www.lianjia.com,內含一系列子站鏈接,無其它有價值信息,各個城市子站點內數據是我們要分析的主要目標。
我們關注二手房的成交數據,以及掛牌在售數據,因此選取一個子站點cd.lianjia.com對相關數據進行分析,其它子站分析方式類似。
整個子站點掛牌數及成交數很大,遍歷不便。但行政區數量有限,只有幾個,每個行政區下分成數百數千小區,每個小區有各自的成交數據及在售數據,數據比較規范,可以按統一規律進行數據組織。
02
—
網站結構及內容分析
按照從總到分的順序逐步遍歷網站數據。
1、從小區查找的首頁提取各行政區URL。
基礎URL為https://cd.lianjia.com/xiaoqu/
下面包含19個行政區。
在這個頁面提取到各個行政區域的URL。
對頁面內容分析的關鍵是找到確定內容位置的唯一標識符,很顯然,data-role="ershoufang"屬性描述的div是唯一的,里面可以獲取每個行政區的url以及行政區名。
2、訪問每個行政區URL,獲取小區總頁數
小區數量很多,有很多頁,需要一頁一頁提取,因此需要總結出每一頁的URL規律,獲取總頁數和小區列表每頁的url拼接方法。
而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以及部分有價值信息。
小區列表內可以提取到小區的屬性,如位置,區域,修建時間以及均價在售套數,另外,還有關鍵的小區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。
成交列表頁面包含了每一套成交房源信息,包括小區,房型,面積,朝向,裝修,電梯,樓層,年代,稅費,掛牌價,成交周期,成交日期,成交總價,成交單價等信息,但最近成交的價格數據被隱藏,需要到房源頁面獲取。
從html中可以看到,成交房源信息在class="listContent"描述的ul內,具備唯一性,而每個房源的描述占一個li,循環遍歷即可提取到各項房源信息。
在每個li內,每個div的屬性都具備唯一性,按div一級一級查找即可獲取,在此同樣不做詳述。
各個房源的URL在class="title"的div內的href屬性值內。
6、訪問成交房源URL,獲取單個房源的詳細信息。
進入單個成交房源頁面,可以看到完整信息,包括小區,房型,面積,朝向,裝修,電梯,樓層,年代,稅費,掛牌價,成交周期,成交日期,成交總價,成交單價等更豐富的信息,包括基本屬性和交易屬性。
基本信息內的基本屬性和交易屬性與在售房源內基本相同,所以二者在提取時相互借鑒。
在房源標題div內可以提取到房源小區信息,其余信息可在其它位置提取到更詳細數據,在此處忽略。
在class="wrapper"的section內,為總價,單價,掛牌價等信息。按各自的class提取即可。
房屋的基本屬性和和交易屬性在class="newwrap baseinform"的div內的class="introContent"的div內,分成兩個div,分別為class="base"及class="transaction"。然后依次提取即可。
7、訪問在售二手房列表URL,獲取全部在售房源URL。
在售列表頁面包含了每一套房源信息,包括小區,房型,面積,朝向,裝修,電梯,樓層,年代,稅費,掛牌總價,掛牌單價等信息,但更詳細的信息,需要到房源頁面獲取。
從html中可以看到,在售房源信息在class="sellListContent"描述的ul內,具備唯一性,而每個房源的描述占一個li,循環遍歷即可提取到各項房源信息。
在每個li內,每個div的屬性都具備唯一性,按div一級一級查找即可獲取,在此同樣不做詳述。
各個房源的URL在class="title"的div內的href屬性值內。
8、訪問在售房源URL,獲取單個房源的詳細信息。
進入單個在售房源頁面,可以看到完整信息,包括小區,房型,建筑面積,套內面積,朝向,裝修,電梯,樓層,年代,稅費,掛牌總價,掛牌單價等更豐富的信息,包括基本屬性和交易屬性。
基本信息內的基本屬性和交易屬性與成交房源內基本相同,所以二者在提取時相互借鑒。
在房源標題div內可以提取到房源小區信息,其余信息可在其它位置提取到更詳細數據,在此處忽略。
在class="overview"的div內,為總價,單價等信息。按各自的class提取即可。
房屋的基本屬性和和交易屬性在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,對房源信息分析獲取有價值信息存數據庫。
為加快速度,應采用多線程方式。
如有疑問可聯系我進行探討,有一個簡單的房源爬蟲可以提供。
長按進行關注。
總結
以上是生活随笔為你收集整理的干货!链家二手房数据抓取及内容解析要点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货:Wireshark使用技巧-显示规
- 下一篇: Wireshark分析实战:某达速递登录