爬取房天下数据观察广州房租情况
新的一年,有房东提出了涨租,也有跳槽的小伙伴,考虑租房换房,趁着这个时点,再来说说租房的事,找到合适的房子是头等大事,接下来让我们通过爬取房天下数据来观察广州房租情况。(结果图在最后面,想看结果图的小伙伴自行往下滑动)
第一步、爬取数据
爬取的时间是2019年12月份,爬取的代码如下
import csv from selenium import webdriver chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" driver = webdriver.Chrome(executable_path=chrome_driver) with open('Data.csv', 'a+', newline='', encoding='utf8') as f: writer = csv.writer(f, dialect="excel") writer.writerow(['标题','详情','位置','价格']) for i in range(2,101): url = "https://gz.zu.fang.com/house/i3"+str(i)+"/" int(i) i+=1 print(url) driver.get(url) titles = driver.find_elements_by_css_selector('div.houseList > dl > dd') # 购房信息 print(titles) for title in titles: data = { 'title': title.find_element_by_css_selector('p.title a').text, #标题 'details': title.find_element_by_css_selector("[class='font15 mt12 bold']").text, #详情 'location': title.find_element_by_css_selector('[class="gray6 mt12"]').text, #位置 'price': title.find_element_by_css_selector('[class="price"]').text, #价格 } print(data) if data: writer.writerow([data['title'], data['details'], data['location'], data['price']]) # writer.writerow([data['price']])
第二步、处理数据,代码下
from pandas import read_csv import csv import re data=read_csv('Data.csv') data[['租房种类','厅室数量','房间面积','房间朝向']]=data['详情'].str.split('|',3,True) data[['区','县','街道']]=data['位置'].str.split('-',2,True) data=data.drop(['详情'],axis=1)#删除详情列 data=data.drop(['位置'],axis=1)#删除位置列 def slp(x): s=re.findall('\d+',x) return int(s[0]) data['房间面积']=data['房间面积'].apply(slp) data=data.dropna() with open('Data2.csv', "w", newline='', encoding='utf8') as f: writer = csv.writer(f) writer.writerow(data.columns) writer.writerows(data.values)
第三步、获取房间面积与房租的关系
import pandas as pd import matplotlib.pyplot as plt import numpy as np data = pd.read_csv('Data2.csv') data=data.sort_values('房间面积') def getPlt(column): from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体 plt.figure(figsize=(15, 5)) plt.xticks(rotation=40) plt.plot(data['房间面积'],data['价格']) # plt.xticks(data['房间面积'],data['价格']) plt.ylabel("平均房租") plt.show() plt.scatter(data['房间面积'],data['价格']) plt.show() def main(column): getPlt(column)#获取column列与房租的关系,并绘制条形图 if __name__ == "__main__": main('房间面积')
结果如下图
第四步、获取租房种类、厅室数量、房间朝向、地区与房租的关系
import pandas as pd import matplotlib.pyplot as plt from pylab import mpl import numpy as np data = pd.read_csv('Data2.csv') sumRent={}#房租总和 sampleSize={}#每个的样本数 dict_vessel=[]#去重后的存放容器 meanRent={}#每个样本的平均房租存储容器 #获取样本种类(样本去重) def getSpecies(column): for i in data[column]: sumRent[i]=0 sampleSize[i]=0 for i in sumRent.keys(): # print(i) dict_vessel.append(i) #每个样本价格数据统计用的方法 def priceMean(column,place,index1): if data[column][index1] == place: if not pd.isnull(data['价格'][index1]): # print(data['最低房租'][index1],' ',data['最高房租'][index1]) sumRent[place] += data['价格'][index1]#每类样本的房租汇总 sampleSize[place] += 1#统计每个样本的个数 #获取column列与房租的关系 def relation(column): for index1 in range(0,len(data)): try: for place in dict_vessel : priceMean(column,place, index1) except Exception as e: a=0 # print("error",e) print('每个样本房租总和:\n',sumRent) print(dict_vessel) for place in dict_vessel: meanRent[place]=sumRent[place]/sampleSize[place] print('每个样本的平均房租:\n',meanRent) #并绘制条形图 def plot(column): mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体 plt.bar(meanRent.keys(),meanRent.values()) plt.xticks(rotation=30) for a,b in zip(meanRent.keys(),meanRent.values()): plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=11) plt.ylabel("平均房租") plt.xlabel(column) plt.show() def main(column): getSpecies(column)#获取样本种类 relation(column)#获取column列与房租的关系 plot(column)#并绘制条形图 if __name__ == "__main__": main('租房种类') main('厅室数量') main('房间朝向') main('区')
运行结果如下:
租房种类与房租的关系
厅室数量与房租的关系
这是上图对应的数据
'4室2厅': 11753.518248175182, '2室1厅': 3906.57614213198, '5室3厅': 19047.058823529413, '1室1厅': 3386.3221649484535, '2室2厅': 4210.963492063492, '3室2厅': 6260.025089605735, '5室2厅': 18676.873563218393, '3室1厅': 4881.433628318584, '1室2厅': 5004.545454545455, '1室0厅': 2935.7012987012986, '3室3厅': 5200.0, '4室3厅': 22922.11111111111, '6室2厅': 18714.285714285714, '9室5厅': 196296.0, '7室3厅': 30357.14285714286, '2户合租': 14385.714285714286, '7室2厅': 11357.142857142857, '6室4厅': 13500.0, '5室1厅': 28000.0, '6室3厅': 23828.571428571428, '0室1厅': 1680.0, '0室0厅': 2500.0, '4室1厅': 6266.666666666667, '9室2厅': 6200.0
房间朝向与房租的关系
地区与房租的关系
最后,希望这些数据对在广州租房的你有所帮助。