如何爬取鏈家真實成交價格並做分析

這裡,我們想要對鏈家某個區域的真實成交房價做一個分析。用到的主要技術是爬蟲和時間序列數據庫以及可視化展示。

爬蟲我們這裡使用python裡面使用最廣泛的scrapy,時間db我們選擇influxdb,圖形化展示就選擇使用簡單展示酷炫的grafana了。

首先看一下我們最終的數據分析的展示頁面。

如何爬取鏈家真實成交價格並做分析

很簡單,展示了某幾個小區的歷史單價曲線,還有左右的成交歷史記錄信息。

好了,現在我們先準備環境。

首先安裝python依賴環境。

如何爬取鏈家真實成交價格並做分析

很簡單,scrapy爬蟲的必要包,influxdb連接influxdb的python客戶端庫。tabulate

只是為了測試的時候,打印展示。

安裝好依賴包之後,我們開始寫代碼。

首先,scrapy開始一個項目很簡單,

scrapy startproject lianjia

這樣,scrapy一個項目就創建好了。下面我們要做的就是在這個項目裡面寫我們的spider了。

我們在spiders目錄下面創建一個文件,叫house_deal_price_spider.py這個就是我們爬取成交記錄的爬蟲代碼了。

如何爬取鏈家真實成交價格並做分析

在spider文件裡面,主要是定義一個基於scrapy.Spider類的class。

如何爬取鏈家真實成交價格並做分析

這裡面的name很明顯就是我們的爬蟲的名字了。待會爬取的時候,爬取這個名字就可以。

scrapy crawl house_deal_price

這個命令就開始執行我們的爬蟲程序了。

start_requests就是爬蟲的入口程序,告訴scrapy從哪些urls爬取內容。我們這裡,就是直接從我們關注的區域的成交價格的首頁為入口開始爬取。

接下來,看一下我們的parse裡面處理的什麼。

如何爬取鏈家真實成交價格並做分析

因為,我們只是給了第一個頁面,需要遍歷到所有的頁面才能爬取所有這個區域的成交歷史記錄,所以我們需要把所有的頁面鏈接獲取到,本來是可以通過“下一頁”的按鈕一直迭代下去的,但是我嘗試過很多次,拿到那個鏈接的text一直是空的,所以一直沒辦法通過“下一頁”的按鈕來獲取所有頁面,後來發現了有個page-data的屬性,存取了頁面的個數。

如何爬取鏈家真實成交價格並做分析

就是這裡,所有這裡採取了這個很tricky的方法來實現了。

這裡我們就直接把所有的response丟給了parse_house函數來處理返回的頁面。

如何爬取鏈家真實成交價格並做分析

如何爬取鏈家真實成交價格並做分析

從頁面上可以看到,鏈家把成交價格給隱藏了,說要從手機應用查看,其實這個頁面點擊進去之後,是可以看到所有的詳細內容,包括成交價格。

如何爬取鏈家真實成交價格並做分析

所以,我們再parse_house函數里面,需要把所有的每個成交記錄的詳細頁面的鏈接拿到,然後丟給parse_deal_detail函數來處理詳細頁面的內容。

如何爬取鏈家真實成交價格並做分析

parse_deal_detail

這裡,就是一個個解析我們需要的內容,來存到influxdb了。

如何爬取鏈家真實成交價格並做分析

我們解析了交易ID,成交價格,掛牌價格,成交單價,交易週期,掛牌時間,成交時間,小區名,戶型,大小,帶看次數,關注數。

然後,需要把這些數據寫到influxdb裡面。

如何爬取鏈家真實成交價格並做分析

我們寫的mesurement是deal_history也就是相當於db的table,influxdb是需要有時間點的,所以這裡time字段我們寫了交易時間,tags字段是用來在數據展示和統計的時候,做group來用的,我們給加了交易ID,小區名,戶型,和大小這4個字段,剩下都寫到fields裡面,來做數據展示。

連接influxdb很簡單。

如何爬取鏈家真實成交價格並做分析

如何爬取鏈家真實成交價格並做分析

寫完之後,就開始爬取數據了,經過了差不多20分鐘左右,數據寫完,我們開始做數據展示,接下來我們去grafana控制檯,添加dashboard,panel,查詢數據,展示。

grafana添加數據源,這裡就不介紹了,之前也講過。我們直接在dashboard中,添加panel,首先添加一個小區的歷史成交單價曲線。

如何爬取鏈家真實成交價格並做分析

這裡,default就是我們的influxdb數據源,後面是我們的mesurement,我們之前把數據寫到了deal_history這裡,後面我們添加查詢條件,這裡就比較笨的方法,手動添加OR條件的想要查詢的幾個小區。然後第二行,SELECT是選擇我們要查詢的域,我們這裡就是查詢成交單價,所以這裡選擇field(unit_deal_price),然後我們需要把統計數據分組,也就是我們的想要根據小區來分區了,所以GROUP BY tag(community),最下面的ALIAS是我們要展示的名稱,我們想要展示小區的名稱,所以通過變量的方式$tag__community,就可以把小區的名字顯示在座標上了。

然後,我們再添加一個表格,把所有的成交記錄展示在表格中。

如何爬取鏈家真實成交價格並做分析

首先,我們需要定義format成table,就是下面的FORMAT AS選擇table。

然後很簡單了,就是把自己想要展示的域在SELECT中一個個添加就可以了。

下面,我們就需要給每個字段的表頭添加我們自定義的名稱。

像是這樣的。

如何爬取鏈家真實成交價格並做分析

我們就需要再virtualization裡面,配置添加列的樣式選項就可以。

如何爬取鏈家真實成交價格並做分析

這裡我們添加了一個column style,把這個樣式適用到那個字段呢,就是Apply to columns named這個選項,我們直接設置成size字段,後面就是設置這個字段的字符類型,單位,表頭,以及如果這個列是數值的話,我們可以設置他的精確度。

這樣,從數據的採集到可視化展示就這麼做完了。

謝謝大家。


分享到:


相關文章: