用python爬取二手房交易資訊並進行分析
用python爬取二手房交易資訊並分析
- 第一步:編寫爬蟲 爬取某平臺上海市十個區共900條二手房的交易資訊
#爬取上海十個區的二手房價資訊 import requests from bs4 import BeautifulSoup import csv #獲取房價的文字資訊 def gethousetext(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "error" # 獲得房子的價格、面積、詳細資訊等 def gethouseinfo(h_list, html, loc): h_info = [] soup = BeautifulSoup(html, "html.parser") house_info = soup.find_all('div', attrs={'class': "listX"}) # 將房屋資訊儲存在一個列表裡 for h in house_info: p = h.find_all('p') h_info = [p[0].text, loc, p[2].text, p[3].text, p[4].text] h_list.append(h_info) def storehouseinfo(h_list, fpath): # 開啟csv檔案,寫入資料 with open(fpath, 'w', encoding='utf-8') as f: house_csv = csv.writer(f, dialect='excel') house_csv.writerow(["基礎資訊","區域","訪問情況","總價","單價"]) for t in h_list: house_csv.writerow(t) def main(): place = ['pudongxinqu', 'minxingqu', 'xuhuiqu', 'putuoqu', 'baoshanqu', 'yangpuqu', 'hongkouqu', 'jiadingqu', 'huangpuqu', 'jinganqu'] place_name = ['浦東新區', '閔行區', '徐彙區', '普陀區', ' 寶山區', '楊浦區', '虹口區', '嘉定區', '黃浦區', '靜安區'] path = 'C:/Users/晴藍/Desktop/house_price.csv' house_list = [] for x, y in zip(place, place_name): sh_url = "https://sh.5i5j.com/ershoufang/" + x for p in range(1, 4): h_url = sh_url + "/n" + str(p) html = gethousetext(h_url) gethouseinfo(house_list, html, y) storehouseinfo(house_list, path) main()
爬取結果展示
- 第二步:提取有效資訊 程式碼展示
import pandas as pd data = pd.read_csv('C:/Users/晴藍/Desktop/house_info_list.csv', engine='python') #data中每隔一行都有空值, 清除空值 data = data.dropna() data['location'] = data['區域'] #從data的基礎資訊中提取出房間佈局、房屋面積、裝修情況 data['room'] = data['基礎資訊'].str.split('·').str[0] data['house_area'] = data['基礎資訊'].str.split('·').str[1].str.split(' ').str[0] #從訪問情況獲取關注人數和帶看次數 data['attention'] = data['訪問情況'].str.split('·').str[0].str.split(' ').str[0] data['recent_visit_times'] = data['訪問情況'].str.split('·').str[1] data['recent_visit_times'] = data['recent_visit_times'].str.replace(' ','').str[6:-1] #獲取單價和總價 data['house_price'] = data['總價'].str[:-1] data['per_square_price'] = data['單價'].str[2:-4] #清除髒資料 del data['區域'] del data['基礎資訊'] del data['訪問情況'] del data['總價'] del data['單價'] #將資料儲存到新的檔案下 data.to_csv('C:/Users/晴藍/Desktop/house_cleaning_data.csv', encoding='utf-8')
結果展示: 第三步:進行視覺化分析 #小戶型市場前景好 房價隨著距離市中心的距離不斷變化。嘉定區因為距離較遠,所以房價在十個區中最低,其他9個區的房屋每平方的均價都在50000以上。且處於上海外環外的地區的嘉定、寶山、閔行房屋均價比位於上海外環外的房屋均價都低。而浦東新區並不完全屬於外環內,但房屋均價卻比較高 圖中可以看到浦東新區的房價極差是最高的,主要是浦東新區的區域面積比較大,一部分在外環內另一部分在外環外,房屋價格差異較大,在外環內的房價在一定程度上拉高了浦東新區的房價說水平 第一張圖點數分佈兩邊少中間多,帶看次數在總體上先隨著價格增多,在80000左右的時候總體的帶看次數隨著價格的增加而開始下降。圖中的資料有點左偏,說明二手房的購買者經濟能力並不是很足,偏向於單價在40000到60000之間的房子。 第二張圖的點數分佈主要集中在500萬以下的區域,同前一張圖的結論相同,二手房的購買者更傾向於價格更低的二手房
房屋的總價收到單價和房屋面積的影響,房屋的面積與房屋的戶型有很大的關係,戶型越多房屋的面積就越大。 這是各個區戶型總數在20以上的帶看次數 從爬取的戶型總數來看,二手房小戶型1室1廳1衛和2室1廳1衛所在比重大,接近三分之二的戶型都是小戶型,其中的原因主要是小戶型購買的經濟壓力較小,且多數人是因為家裡人口增多,收入變高,打算賣房買房。小戶型帶看次數平均值都在3.0以上,說明大家對二手房小戶型的中意程度比較高。
結論:小戶型二手房的購買者主要是經濟能力不是很足但又是買房剛需的年輕小兩口,小戶型的價格相對來說比較低,且從上述不同戶型的平均帶看次數來看,小戶型二手房的前景依舊不錯。
#發現問題 網站內容的訪問次數和關注度能夠表現出該內容對訪問者的影響力,同時可以看出訪問者對該內容的注意程度,網站的所有者可以從中挖掘出大量的商業資訊。 圖中資料是某平臺二手房每個房屋的關注度和實際帶看次數。 兩種資料的散點圖沒能發現明顯的規律,假設兩種資料不具有明顯的線性關係。運用線性模型求得帶看次數與關注次數的相關係數為0.0914,該值接近0,基本上兩者沒有相關性,假設正確。說明網站上房屋的關注度並沒有進一步的轉換為房屋的實際帶看次數,網站對使用者的行為的關注程度不夠,沒有在發現客戶相關行為時對使用者的行為進行研究和挖掘使用者的潛在價值。