1. 程式人生 > >杭州鏈家二手房數據分析

杭州鏈家二手房數據分析

bfd response pre none 發送請求 進入 status ret save

杭州鏈家二手房數據

項目說明

練習爬蟲相關技術,從網絡上抓取數據,保存到本地csv文件和mongodb數據庫I中,參考網絡上相關資源實現二手房數據可視化,後面繼續完善回歸分析部分和預測分析。

項目實現

1. 數據獲取

二手房數據可以從網絡中獲取即通過編寫爬蟲腳本從鏈家官網中獲取相應數據。二手房數據主要采集房源區縣信息、房源小區信息、房源戶型、樓層信息、朝向信息、房屋面積信息、房屋建築時間信息和房屋總價信息。具體實現以代碼說明。

1.1 觀察頁面信息

技術分享圖片
紅色方框中信息需要采集,但是缺少房源區縣信息。簡單處理方法是獲取房源的鏈接地址,進入相關頁面查找詳細信息。
技術分享圖片
在頁面中可以發現有目標信息,如果需要詳細信息可以下基本信息中獲取。

技術分享圖片

1.2 爬蟲實現

基本思路:
使用 requests 請求頁面數據,使用xpath解析頁面數據獲取目標信息,將數據保存到csv文件中和mongodb 數據庫中。

  • 定義初始化方法,提供URL和headers信息
    def __init__(self, url, headers):
       """初始化設置"""
       # 訪問頁面 url地址
       self.url = url
       # request請求頭部 headers
       self.headers = headers
  • 定義get_page()方法獲取頁面內容

    def get_page(self, url, headers):
        """獲取頁面HTML內容"""
        try:
            # 發送連同headers的request請求,請求方法為get
            response = requests.get(url, headers=headers)
            # 判斷返回狀態碼,若狀態碼為200,返回頁面內容;反之返回None
            if response.status_code == 200:
                return response.text
            else:
                return None
        except RequestException:
            # 當請求異常時,返回None
            return None
  • 定義parse_page()解析頁面內容
    selector = etree.HTML(html)
    selector.xpath(‘//li[@class="clear LOGCLICKDATA"]‘)

    技術分享圖片

可以從中篩選出鏈接信息
技術分享圖片

根據鏈接發送請求再抓取目標信息
區縣信息
技術分享圖片

小區信息
技術分享圖片
戶型信息
技術分享圖片
......
最後使用yield 生成數據

yield {
                "house_id": house_record,
                "link": link,
                "region": region,
                "community": community,
                "layout": layout,
                "floor": floor,
                "direction": direction,
                "renovation": renovation,
                "area": area,
                "year": year,
                "total_price": total_price,
            }

定義save_to_csv()將數據存儲到csv文件中
技術分享圖片

定義save_to_mongo()方法將數據保存到mongodb
技術分享圖片
為加快執行效率,采用多線程實現

from multiprocessing import Pool
if __name__ == "__main__":
    pool = Pool()
    pool.map(main, [i for i in range(1, 100 + 1)])

2. 數據處理

加載csv數據

在加載數據前需要對數據進行清除,這部分已在Excel中處理完成。

  • 使用pandas讀取csv文件

    # 讀取數據
    csvfile = "second_hand_house.csv"
    lianjia_data = pd.read_csv(csvfile,dtype={"area":np.float,"year":np.int,"total_price":np.float})
  • 預覽數據
    技術分享圖片

  • 查看數據信息
    技術分享圖片
    可以看到數據類型設置已生效,默認數據類型是object,也就是字符串。

  • 添加均價列數據
    lianjia_data["avg_price"] = lianjia_data["total_price"]/lianjia_data["area"]

    技術分享圖片
    均價數據結果小數保留2位

    pd.set_option(‘precision‘, 2)

    技術分享圖片

數據展示

查看杭州各區縣均價
技術分享圖片
查看杭州各區縣房源數量
技術分享圖片
查看戶型分布情況
技術分享圖片

查看房源裝修情況
技術分享圖片

查看下房源建築時間分布
技術分享圖片

杭州鏈家二手房數據分析