• 【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析


    引子

    “青春才几年,疫情占三年”,前段时间被这句疫情梗刷屏,确实,这三年我们的社会经历了太多的跌宕起伏,也让置身其中的我们对未来充满了更大的未知和焦虑。
    这三年,承载我们无数梦想、牵动无数人心弦的房价在一座城市如何一路走来,未来又将走向何处?我通过python代码在房天下平台抓取了19个(新)一线城市近三年的二手房均价,尝试管窥一斑。

    一线城市的范围采用百度百科词条的2022年一线及新一线城市榜单,分别为:北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛。
    在这里插入图片描述

    分析网页

    打开房天下网站,可以看到菜单栏有“查房价”菜单
    在这里插入图片描述
    切换tab后,下拉页面可以看到均价走势图就有三年的选项
    在这里插入图片描述
    F12检查页面,查看相应元素,找到数据接口
    在这里插入图片描述

    分析数据

    在这里插入图片描述
    这里的返回结果比较完美,不需要我们对xml文件进行解析,只需要对记过字符串解析即可。
    数据前部分是一个嵌套的列表,后面部分我通过另外一个获取接口分析是一个时间标记,因为当我们切换到杭州时,发现近三年的日期范围是2019年7月-2022年6月,而北京、上海这两个城市的时间范围是2019年8月-2022年7月。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    编写程序

    import time
    import requests
    from ast import literal_eval
    import xlwt
    
    
    def writeCol1(line, city, arr):
        sheet.write(line, 0, city)
        i = 1
        for cell in arr:
            if 1 == line:
                date = time.strftime("%Y%m", time.localtime(cell[0] / 1000))
                sheet.write(0,i,date)
            sheet.write(line, i, cell[1])
            i = i + 1
    
    
    def writeCol2(line, city, arr):
        sheet.write(line, 0, city)
        i = 2
        for cell in arr:
            # 如果第一次写,则把第一行的行名写入表格
            if 1 == line:
                date = time.strftime("%Y%m", time.localtime(cell[0] / 1000))
                sheet.write(0,i,date)
            sheet.write(line, i, cell[1])
            i = i + 1
    
    
    def getCityPrice(cityCode):
    
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
        }
        imgurl = "https://fangjia.fang.com/fangjia/common/ajaxtrenddata/"+ cityCode +"?dataType=4&Class=defaultnew&year=3"
        req = requests.get(url=imgurl, headers=headers)
        return req.text
    
    
    if __name__ == '__main__':
        cityArr = [["北京","bj"],["上海","sh"],["广州","gz"],["深圳","sz"],["成都","cd"],["重庆","cq"],["杭州","hz"],["西安","xian"]
            ,["武汉","wuhan"],["苏州","suzhou"],["郑州","zz"],["南京","nj"],["天津","tj"],["长沙","cs"],["东莞","dg"],["宁波","nb"],["佛山","fs"]
            ,["合肥","hf"],["青岛","qd"]]
        # 声明excel表
        house_prices = xlwt.Workbook(encoding='utf-8', style_compression=0)
        sheet = house_prices.add_sheet('城市房价', cell_overwrite_ok=True)
        line = 1
        for city in cityArr:
            cityName = city[0]
            cityCode = city[1]
            print(cityCode)
            s1 = getCityPrice(cityCode)
            print("========="+ cityName + "=========")
            print(cityCode)
            print(s1)
            # 切分结果
            arr_str = s1.split("&", 1)[0]
            try:
                arr = literal_eval(arr_str)
    
                # 日期
                data_str = s1.split("&", 1)[1]
                # 如果是北京上海写入第二列
                #(现在可能是一些城市7月的数据没有出来,所以时间截至到6月,随着时间推移,可能这些城市的时间范围都一致了,所以写之前还是要进行数据验证)
                if cityName in "北京上海":
                    writeCol2(line, cityName, arr)
                else:
                    writeCol1(line, cityName, arr)
            except IOError:
                print(cityName + "=====数据获取异常====")
                continue
            line = line + 1
            time.sleep(3)
        savepath = 'F:\城市房价.xls'
        house_prices.save(savepath)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    运行结果:

    在这里插入图片描述

    可视化分析

    为了方便分析,我直接使用Excel图表工具进行了房价走势的简单对比。
    将城市的最新房价排序,把均价相近的三个城市分成一组,这样纵坐标的粒度更细,房价走势起伏更加明显。

    第一组:长沙、佛山、重庆

    在这里插入图片描述
    这三个城市的房价这三年相对比较稳定,虽然在2020年3月有所上扬,但由于本身价格基数小,上扬绝对值也只有1000元左右,而且在2021年5月后又都开始回落,尤其是佛山2022年4月价格甚至降至近三年新低。

    第二组:郑州、西安、成都

    在这里插入图片描述
    这三个城市中西安、成都价格震荡较大,尤其西安2021年4月由14944元/平直接跳涨至2021年5月的16729元/平,一个月涨幅达12%,然后高位仅维持一个月,2021年7月开始迅速一路下跌到现在的14665元/平,真是涨落只在勃忽间。另外,郑州从走势看虽然没有像西安、成都这样波动明显,但是放大到三年的维度,下跌却是最厉害的。

    第三组:合肥、青岛、武汉

    在这里插入图片描述
    这三个城市中武汉相对平稳,合肥在2021年5月有一次价格跳跃,然后继续横盘。青岛三年来则一直呈下跌趋势,尤其2022年4月价格直接大跳水,跌幅达20%。

    第四组:天津、东莞、苏州

    在这里插入图片描述
    这三个城市中,苏州2020年5月前基本维持缓慢上涨状态,5月后开始横盘,价格在28000元/平小幅波动。天津2020年8月后也是横盘状态。东莞2020年5月价格出现一次异常跳跃后,继续维持缓慢上涨至2021年6月,然后开始呈缓慢下跌趋势。

    第五组:宁波、南京、杭州

    在这里插入图片描述
    这三者中,杭州、宁波曲线呈平稳上扬状态,价格一直稳中有进,缓慢爬升,2021年7月后都开始涨幅放缓。南京则在上涨过程中于2021年5月出现一次明显下跌,然后最近一年在小幅震荡中横盘。

    第六组:南京、杭州、广州

    在这里插入图片描述
    在这一组中,广州虽然是一线城市,但是价格区间和北、上、深三城有较大差距,其价格和杭州、南京又较为相近,三者重新化为一组进行比较。广州价格在2021年4月之前价格和走势和杭州基本接近,为平稳上涨阶段,4月后陡然上涨,至2021年7月后又开始明显下跌,重新回落到和杭州一个水平。

    第七组:北京、上海、深圳

    在这里插入图片描述
    北京、上海、深圳为老牌一线城市,价格也一直领跑全国。三城中,北京相对平稳,2021年5月前一直在60000元/平徘徊,2021年6月至2022年6月则维持在63000元/平。上海则呈阶梯状,2021年3月在57000震荡,2021年6、7月则大幅跳跃近69000线,然后在高位呈缓慢下跌趋势。深圳则为大起大落型,2021年2月猛涨至77285元/平后,又一路下跌至63457元/平,跌值13828元/平,跌幅近18%。

    后记

    当然,城市房价的涨跌是受到政策、人口、经济等等综合因素的影响,未来的走势也同样如此,而且具体到每个楼盘又会受到交通、商业、教育等等更加复杂的环境因素影响。仅仅凭几个月的价格数字,无法做出太多有意义的评判,而且作为非房产从业人员,以上也仅仅是我基于这些往期数据的简单描述。
    由于房价数值大多为5位数,直接展示在图表上会有数据重叠等问题影响观感,如果有朋友需要这些数据做更深入的研究,可以关注公众号“一鲦鱼”,回复关键字“走势”直接获取数据文件和以上图片。另外,后期我也会考虑找寻更多维度的房产数据,也会在后期更新文章的同时,分享更多的免费数据。

  • 相关阅读:
    KingbaseES V8 GIS数据迁移方案(2. Kingbase GIS能力介绍)
    微信小程序开发
    Linux入门之 init
    python基础(Python高级特性(切片、列表生成式)、字符串的正则表达式、函数、模块、Python常用内置函数、错误处理)培训讲义
    【HDU No. 4006】 第k 大的数 The kth great number
    nodejs worker_threads的事件监听问题
    Redisson实现分布式锁案例
    网络安全是否有需求
    登录Tomcat控制台,账号密码输入正确但点击登录没反应不跳转到控制台页面
    电脑复制按哪个键?还不会操作的赶紧来看!
  • 原文地址:https://blog.csdn.net/weixin_44162809/article/details/125799674