天天看點

爬取鍊家租房資訊

本次是以的要求來自: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%的經濟支出
  • 至于房屋朝向、高低樓層等因素,現在有其他因素(比如:空調,烘幹機等工具)實在不必過多考慮