本次所以的要求來自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075
前言
在二手房網找房時,房屋物理信息(指房屋本身的信息,例如戶型、朝向、面積、裝修等固定的屬性。)、附屬信息、價格信息、周邊情況信息,哪一個才是年輕人關注的重點呢?
這次的租房房源數據來源於方天下(https://sh.esf.fang.com/house/i310/),用 Python 收集數據后制作成可視化圖形。
一、數據獲取
1.網站代碼分析:
首先這個網站有登陸功能,登錄網站,看看登錄前后前后是否有區別, 發現並無區別,爬蟲時可以無需模擬登陸:
需要爬蟲的數據為紅色方框部分,對應的內容和代碼:


2.代理IP
在爬取數據100條以后,網站需要驗證碼才可以登陸進去,此時可以考慮使用代理ip進行爬取,因為免費ip少之又少,並且時效性較短,用起來不太方便,本人用了班里同學爬取整個代理網站的ip並篩選好的代理ip使用,詳情可見鏈接:。
測試代理ip失效(txt格式保存到代碼路徑下)如下:

3.設置時間間隔
爬取時間過快也會導致被封ip風險性增加,設置一下時間間隔,代碼如下:
1 # 為了降低被封ip的風險,設置合理的爬取間隔,每爬20頁便隨機歇1~5秒。 2 if page%20 == 0: 3 time.sleep(random.random()*5)
二、數據爬取
1 from bs4 import BeautifulSoup 2 import requests 3 import pandas 4 from simple_proxy import ProxyIPWormXiCi; 5 from header import proxy, Header; 6 7 def dealwithKey(info): 8 for k in info: 9 if '層' in k: 10 info['樓層']=info.pop(k) 11 elif '進門' in k: 12 info['朝向']=info.pop(k) 13 elif '程度' in k: 14 info['裝修']=info.pop(k) 15 16 def get_house_detail(url): 17 try: 18 info={} 19 info_adj={} 20 res=requests.get(url) 21 soup=BeautifulSoup(res.text,'html.parser') 22 # soup = proxy(main_url); 23 info['標題']=soup.select('.title h1')[0].text.strip() 24 info['總價']=soup.select('.price_esf ')[0].text.strip() 25 for item in soup.select('.trl-item1'): 26 key = item.select('.font14')[0].text.strip() 27 value=item.select('.tt')[0].text.strip() 28 info[key]=value 29 dealwithKey(info) 30 return info 31 except Exception: 32 print("此頁異常:{}".format(url)); 33 return None; 34 35 36 #用item做為循環變量名,代表當前網頁class為trl-item1的所有標簽節點 37 #key表示item標簽下所有class為font14的標簽節點文本內容 38 #print(key) 39 #value示item標簽下所有class為tt的標簽節點文本內容 40 #將info里面所有key賦值給value 41 # k=#創建列表變量k,為了統一字段(有的“樓層”,有的“中層(地20上共3層”) 42 #info_adj= #利用dict(zip(list1,list2))創建新的字典(調整字段后的) 43 #返回info_adj 44 45 def dfb(main_url, houseary): 46 res = requests.get(main_url, headers=Header().headers) #獲取上海在售二手房源網頁首頁(http://esf.sh.fang.com/)的響應包,命名為res 47 soup = BeautifulSoup(res.text, 'html.parser') # 創建BeautifulSoup對象對res響應包進行解析,結果命名為soup 48 # soup = proxy(main_url);#使用代理ip爬取 49 domain1 = 'http://esf.sh.fang.com/' 50 for house in soup.select('.shop_list dl dd h4 a'):#循環遍歷獲取網頁首頁所有房源詳細內容頁的url,循環變量名為house(提示:檢查定位路徑定位查找的節點是否為空) 51 url = domain1+house['href']#利用domain與存儲房屋詳細內容的相對url的標簽節點構建房屋的url 52 # print(url)#打印輸出查看url 53 # dfb1(url) 54 info = get_house_detail(url) 55 print("info:{}".format(info)); 56 if info != None: 57 houseary.append(info) 58 return houseary; 59 60 if __name__ == "__main__": 61 main_url = 'http://esf.sh.fang.com/house/i3'; 62 xici_ip = ProxyIPWormXiCi("http"); #調用同學寫好的代理ip,本人直接用 63 xici_ip.get_pages_ips(xici_ip.start_page, ); 64 houseary = []; 65 for i in range(1,100): 66 print("當前第:{}".format(i)); 67 houseary = dfb(main_url + str(i) + "/", houseary); 68 if len(houseary) == 0: 69 print("稍后再試,請從第{}頁開始".format(i)); 70 break; 71 df = pandas.DataFrame(houseary)#將獲取到的所有房屋信息轉換成數據框的結構 72 df.to_csv('house.csv', mode="a", encoding="ANSI");
這是我獲取數據,總共12479條:

三、數據分析
1. 地理位置
找二手房房,第一個看的肯定是地理位置。畢竟每個人都想住的地方離公司近一些,這樣就不用花費太多時間在通勤上。雖然大家都默認在一線城市工作的通勤時間單程普遍為1小時左右。但是如果能夠住的近一點,不用花那么多時間在路上,這樣幸福感肯定會提高。
先來看一個總體二手房價格水平:
- 靜安&盧灣&黃浦&海淀地區,租房價格是最貴的,平均價格皆接近十萬元(每平方)
- 閔行&寶山&嘉定&閔行&松江&青浦&奉賢,因為浦東新區,其房租價格也不便宜,平均皆接近五萬元(每平方)
- 盧灣&閘北等地區,作為新崛起的著名城市地區,其則便宜有些可以達到舊中心價格,也有和浦東新區差不多


由上圖可得,各地區的均價基本都在20000以上,其中閔行的房源數最多,但均價中等,為46959元/平方,這或許與閔行作為商業區有關系,2018年,實現社會消費品零售總額942.14億元,比2016年增長5.6%。至年末,閔行區共有各類市場113個。閔行區現有1個國家級社區商業示范社區(閔行區百聯南方購物中心);4個市級社區商業示范社區(閔行區百聯南方購物中心、七寶社區商業中心、春申萬科城商業街、閔行區莘庄鎮仲盛世界商城社區);4個上海特色商業街區(虹梅路休閑街、七寶老街、十尚坊休閑餐飲街、虹泉路韓國街)。
由上圖可以看出,均價在40000-60000之間的房屋數量最多,同時15000-20000這個價位之間房屋數少的可憐。
據上海市統計局的數據,2018年全市居民月人均可支配收入為64183元。。
上海二手房的出售收入比,驚人地接近60%。很多人一生一大半的收入,都花在了買房上,人生就這樣被鎖定在貧困線上。
統計數據也表明,上海買二手房人群收入整體偏低。47%的人,年薪在10萬以下。就這樣,第一批90后扛過了離婚、禿頭、出家和生育,終於還是倒在了買房面前。
2. 戶型
年輕人在看房屋物理信息的時候,首先關注的可能是戶型。因為房屋戶型的格局在很大程度上決定了租客的生活方式。例如,如果房子是4室0廳,那說明,這個房子會是比較擁擠和陰暗的,在洗漱問題上會比較緊張;如果房子3室一廳,帶廚房和衛生間,帶陽台,那就說明這個房子的采光比較好,整體明亮寬敞,是一個比較合適的居住環境;有的房屋不帶廚房,那就說明之后做飯就不太可能了。
所以有過租房經驗的年輕人,能夠從戶型上看出一些房屋的真實居住情況;而對追求安靜舒服想要自己的控件的租客來說,1室戶是最好的選擇。由於政策對群租房的限制,所以現在房子的戶型多為3室一廳,最多4室。
當然,隨着越來越多的租客想要獨立的空間,1室戶的房源也越來越多。

3. 樓層
樓層其實和電梯的關聯度比較高。老小區一般樓層較低,但是沒有電梯。但是新小區的話,樓層高,有電梯。所以如果有電梯的話,年輕人對樓層的要求度不高。反而對電梯的要求度更高,畢竟現在誰願意爬樓梯呢?
當然也會有人考慮某些樓層段的房屋空氣質量不好,但這些在租房的情況下是少數,更多的是買房的時候會考慮中低層的樓房。

4. 朝向/裝修
大家都知道房子要坐北朝南,這樣才能有陽光、采光好、溫度好。但對於租房的年輕人來說,房子的朝向似乎並沒有那么重要,畢竟大家白天更多時間都在公司上班,關心朝向的唯一作用可能就是好不好曬衣服。但也沒有誰特意選擇某一個朝向的房屋。
而且現在在建造房子的時候,樓棟間的間隔都經過計算,不管哪個方向的房屋,都不存在因為朝向不好就非常潮濕陰暗的問題。畢竟現在窗戶大、有空調就已經能解決這兩個問題了。

關於裝修,現在租房平台上的房源的裝修都是已經裝修過,至少看的過去。對於是精裝還是簡裝,相信大部分年輕人還是更關心精裝比簡裝貴多少錢。

總的來說,朝向和裝修都是租客關心的若因素。所以大部分租房平台並不會展示“裝修”這一信息。還有一點就是現在的裝修成本和裝修難度已經大大降低了,從淘寶上購買自己喜歡的裝飾物,參照一些照片,自己動手,不管是北歐風還是Ins風,都不是什么復雜的事情。
6.
1 # -*- coding: utf-8 -*-
2 import jieba # 加載停用表
3 import pandas as pd
4 from wordcloud import WordCloud 5 import matplotlib.pyplot as plt 6 # 分解 7 article = open("fuli.txt", "r", encoding='utf-8').read() 8 jieba.add_word('近地鐵') 9 jieba.add_word('精裝') 10 jieba.add_word('降價) 11 jieba.add_word('帶家電') 12 jieba.add_word('電梯') 13 jieba.add_word('采光') 14 jieba.add_word('出行方便') 15 jieba.add_word('拎包入住') 16 jieba.add_word('誠心出售') 17 jieba.add_word('戶型正') 18 jieba.add_word('花園') 19 jieba.add_word('急售') 20 jieba.add_word('樓層好') 21 jieba.add_word('1室1廳') 22 jieba.add_word('景觀') 23 jieba.add_word('隨時') 24 jieba.add_word('品質小區') 25 jieba.add_word('朝南') 26 jieba.add_word('低價') 27 jieba.add_word('視野闊') 28 jieba.add_word('房型正') 29 jieba.add_word('位置好') 30 jieba.add_word('綠化帶') 31 jieba.add_word('誠售') 32 jieba.add_word('產權') 33 jieba.add_word('環境安靜') 34 jieba.add_word('配套完善') 35 words = jieba.cut(article, cut_all=False) # 統計詞頻 36 stayed_line = {} 37 for word in words: 38 if len(word) == 1: 39 continue 40 else: 41 stayed_line[word] = stayed_line.get(word, 0) + 1 42 print(stayed_line) # 排序 43 xu = list(stayed_line.items()) 44 # print(xu) 45 #存到csv文件中 46 pd.DataFrame(data=xu).to_csv("fuli.csv",encoding="utf_8_sig")


7. 結論描述
- 上海價格受地理因素嚴重影響,越靠近內環租房價格越貴。
- 三四環附近如海淀、朝陽等區域,企業聚集人流量大,租房價格仍然居高不下
- 對於買二手房一族,租房比較實惠的地方在豐台順義昌平等地區,並且最好離附近地鐵站有一定距離,借助共享單車或步行完成最后一公里路程,至少能給自己節省30%的經濟支出
- 至於房屋朝向、高低樓層等因素,現在有其他因素(比如:空調,烘干機等工具)實在不必過多考慮
