爬取房天下数据观察广州房租情况

 

新的一年,有房东提出了涨租,也有跳槽的小伙伴,考虑租房换房,趁着这个时点,再来说说租房的事,找到合适的房子是头等大事,接下来让我们通过爬取房天下数据来观察广州房租情况。(结果图在最后面,想看结果图的小伙伴自行往下滑动)
第一步、爬取数据
爬取的时间是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

 

房间朝向与房租的关系
在这里插入图片描述
地区与房租的关系
在这里插入图片描述
最后,希望这些数据对在广州租房的你有所帮助。

posted @ 2020-01-08 21:45  陌攻  阅读(412)  评论(1编辑  收藏  举报