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


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

    import csv
    from selenium import webdriver
    
    chrome_driver = "C:Program Files (x86)GoogleChromeApplicationchromedriver.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('每个样本房租总和:
    ',sumRent)
        print(dict_vessel)
        for place in dict_vessel:
            meanRent[place]=sumRent[place]/sampleSize[place]
        print('每个样本的平均房租:
    ',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

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

  • 相关阅读:
    使用javaDate类代数据仓库维度表
    Hermes和开源Solr、ElasticSearch 不同
    MapReduce 异常 LongWritable cannot be cast to Text
    吐槽CSDN编辑
    Codeforces 452A Eevee
    看不清楚未来,请做好如今
    JDBC数据库连接
    mixpanel实验教程(2)
    使用jquery+一般处理程序异步载入信息
    Eclipse中的Maven项目报Unbound classpath variable错误
  • 原文地址:https://www.cnblogs.com/mogong/p/12168980.html
Copyright © 2020-2023  润新知