如何一鍵抓取全國二手房和租房數據? (全部源碼)

最近又要租房了,哪裏的性價比更高?買房卻不知道全國市場的趨勢如何?程序員自有辦法,抓取網絡的房產交易和租房數據來分析啊!

用Python寫起來麻煩,用商業軟件速度慢還收費,開源的圖形化爬蟲Hawk,已經在其任務市場裏內置了全國鏈家和我愛我家的工程任務。一鍵即可加載市場任務,一鍵在全國幾十個城市之間切換,還能一鍵導出數據到Excel,txt等各種文本類型,心動了麼?

Hawk,由沙漠之鷹歷時五年個人業餘時間開發 ,從2015年開發至今,已經經歷三個版本,但是Hawk5則帶來了其歷史上最大的一次更新,並提供了社區化的任務市場,多國語言和更強大的調試系統。

本文將手把手地讓您通過Hawk無需編程地抓取全部房產數據,並從中瞭解Hawk的設計思想和原理。如果你已經是Hawk的用戶,可以通過本文了解Hawk5的最新功能。

本文面向程序猿同學,一些常識不再介紹,之後會對源代碼進行講解。更多的細節可參考使用文檔,有包含Hawk方方面面的信息。

GitHub主頁:https://github.com/ferventdesert/Hawk

使用文檔: https://ferventdesert.github.io/Hawk/

下載地址: https://github.com/ferventdesert/Hawk/releases

國內下載地址: https://gitee.com/deserthawk/Hawk/attach_files

啓動Hawk

Hawk是綠色軟件,下載後雙擊Hawk.exe直接啓動,可能依賴於.Net Framework 4.5,系統提示時可自行下載安裝。

啓動後,在歡迎頁面有三個tab頁: 新建任務,任務市場和參數設置。歡迎頁面非常重要,能夠新建任務,或者瀏覽相關文檔和幫助。

front.gif

但本教程不介紹如何設計任務。我們直接使用現有的任務市場。切換到任務市場,Hawk會訪問遠程git倉庫拉取任務列表(這可能需要一些時間)。

稍等片刻Hawk即可將遠程任務預覽出來。 其中包括教學工程,搜狐新聞等示例。

任務市場

左側選擇鏈家全國地產,該工程包括了抓取全國的二手房,新房,小區,租房信息,

在左側工程列表上點擊右鍵加載,即可加載鏈家的整個任務。(當然也可以在右側任務列表上加載單個任務,Hawk只會加載它和它依賴的任務列表)。

查看抓取結果

在Hawk主界面右側是當前的狀態,包括三個區域:

  • 已加載任務
  • 數據管理:可顯示生成的或從文件中導出的表
  • 工作線程視圖:正在執行的任務都會顯示在這裏

在“已加載任務”中,雙擊任一欄目(此處我們選擇鏈家在售),Hawk就會在後臺執行實時抓取和計算,並將最終抓取結果預覽在當前頁面中,默認顯示的是北京的二手房信息。如果你希望預覽更多條數據,修改下方調試框的採樣量,點擊刷新即可。

是不是很方便?如何在多個城市間切換?如何將數據導出?不要着急,我們先講解Hawk是如何工作的。

Hawk是如何工作的?

還是以鏈家的二手房列表爲例,鏈家的頁面:

https://bj.lianjia.com/ershoufang

image.png

每頁有30條數據,但一個城市最多隻能顯示100頁。通過拼接URL最多也只能生成3000條數據。但是我們獲取每個區縣(如東城區,西城區)的地址,再通過每個區縣獲取其每個區域(如金融街,平安裏)的地址和二手房數量,這樣每個區域的數量就不超過3000條了,我們利用類目組合繞過100頁的抓取限制,進而能獲取當前城市全部的信息。

鏈家頁面

Hawk是通過多個模塊組合而成的工作流系統,左側顯示了當前任務所需的所有步驟模塊,點擊任意步驟,Hawk就會跳到該步並預覽結果,雙擊該模塊,就能查看模塊的配置。

Hawk數據清洗

在下方的調試欄中,還可以勾選“調試詳情”,通過點擊上一步下一步,可單步調試,在下方的調試輸出框中會顯示當前模塊的作用和參數。

如何保存全部數據

剛纔是預覽模式,爲了保存全部數據,我們已經在模塊列表的最下方拖入了寫入數據表。其表名填的是鏈家北京二手房

在數據清洗左側的下方(保持默認參數,串行模式,延時值1000毫秒,否則會被封禁)點擊執行即可,Hawk會自動分配線程池,開始抓取信息。

執行線程

抓取完畢後(大概需要50分鐘),如果你想取消任務,在右下角的“線程管理器”上,在“鏈家在售串行任務”上點擊右鍵,並點取消即可。

run.gif

最後,在導出的數據表上,右鍵點擊另存爲,導出到Excel即可。

獲取租房信息?

很簡單,點擊任務列表中的鏈家租房即可。 其他操作和鏈家二手房是一致的。

你會發現,幾乎所有的任務都依賴於一個“底層通用任務”,它抽象了二手房,租房,小區,新房的公共部分。Hawk使用子任務實現任務間的互相調用。這樣可極大地節省設計所需的時間。

在不同的城市間切換?

沙漠君我不是北京的,我想看其他城市的!

我們回到Hawk首頁,點擊任務市場的參數設置。如下圖:

左側展示了當前系統全局的配置, 包括總的web請求數量等,右側是當前工程的全局設置。 程序猿朋友們都知道,這就是全局參數嘛。我們在參數組選擇的下拉菜單中,選擇不同的城市,回到之前的數據清洗界面再次刷新,就會發現城市發生變化了!

這就是Hawk的全局參數配置系統,它通過yaml文件描述了一些鍵值對。在任務中,通過大括號,能夠隨時引用全局參數中配置的信息。例如,你可以在"底層通用任務"的第一個模塊“從文本生成”中看到{city},它代表讀取全局配置中city的值。

param.gif

你也想設計這樣的任務?

哈哈,我猜到了!Hawk內置了強大的文檔系統。每個模塊都有詳細的使用介紹,並能在新手模式間切換。同時還能夠自動生成幫助文檔,在任何一個數據清洗的任務中,點擊調試工具欄中的“問號”按鈕,即可彈出當前任務手把手的教程,你只要按照他的步驟一步步操作即可!

doc.gif

除了直接看自動生成的幫助文檔。可以閱讀Hawk的教程,快速教程中提供了使用的簡要說明,幫助你快速上手。而示例教程中,給出了幾個經典例子的步驟。

其他參考網址:

https://ferventdesert.github.io/Hawk/ 使用Hawk在線使用介紹

 

作者:熱情的沙漠 
出處:http://www.cnblogs.com/buptzym/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章