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

这里写目录标题

    • 引子
    • 分析网页
    • 分析数据
    • 编写程序
    • 运行结果:
    • 可视化分析
        • 第一组:长沙、佛山、重庆
        • 第二组:郑州、西安、成都
        • 第三组:合肥、青岛、武汉
        • 第四组:天津、东莞、苏州
        • 第五组:宁波、南京、杭州
        • 第六组:南京、杭州、广州
        • 第七组:北京、上海、深圳
    • 后记

引子

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

一线城市的范围采用百度百科词条的2022年一线及新一线城市榜单,分别为:北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛。
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第1张图片

分析网页

打开房天下网站,可以看到菜单栏有“查房价”菜单
在这里插入图片描述
切换tab后,下拉页面可以看到均价走势图就有三年的选项
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第2张图片
F12检查页面,查看相应元素,找到数据接口
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第3张图片

分析数据

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第4张图片
这里的返回结果比较完美,不需要我们对xml文件进行解析,只需要对记过字符串解析即可。
数据前部分是一个嵌套的列表,后面部分我通过另外一个获取接口分析是一个时间标记,因为当我们切换到杭州时,发现近三年的日期范围是2019年7月-2022年6月,而北京、上海这两个城市的时间范围是2019年8月-2022年7月。
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第5张图片
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第6张图片
【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第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)

运行结果:

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

可视化分析

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

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第9张图片
这三个城市的房价这三年相对比较稳定,虽然在2020年3月有所上扬,但由于本身价格基数小,上扬绝对值也只有1000元左右,而且在2021年5月后又都开始回落,尤其是佛山2022年4月价格甚至降至近三年新低。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第10张图片
这三个城市中西安、成都价格震荡较大,尤其西安2021年4月由14944元/平直接跳涨至2021年5月的16729元/平,一个月涨幅达12%,然后高位仅维持一个月,2021年7月开始迅速一路下跌到现在的14665元/平,真是涨落只在勃忽间。另外,郑州从走势看虽然没有像西安、成都这样波动明显,但是放大到三年的维度,下跌却是最厉害的。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第11张图片
这三个城市中武汉相对平稳,合肥在2021年5月有一次价格跳跃,然后继续横盘。青岛三年来则一直呈下跌趋势,尤其2022年4月价格直接大跳水,跌幅达20%。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第12张图片
这三个城市中,苏州2020年5月前基本维持缓慢上涨状态,5月后开始横盘,价格在28000元/平小幅波动。天津2020年8月后也是横盘状态。东莞2020年5月价格出现一次异常跳跃后,继续维持缓慢上涨至2021年6月,然后开始呈缓慢下跌趋势。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第13张图片
这三者中,杭州、宁波曲线呈平稳上扬状态,价格一直稳中有进,缓慢爬升,2021年7月后都开始涨幅放缓。南京则在上涨过程中于2021年5月出现一次明显下跌,然后最近一年在小幅震荡中横盘。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第14张图片
在这一组中,广州虽然是一线城市,但是价格区间和北、上、深三城有较大差距,其价格和杭州、南京又较为相近,三者重新化为一组进行比较。广州价格在2021年4月之前价格和走势和杭州基本接近,为平稳上涨阶段,4月后陡然上涨,至2021年7月后又开始明显下跌,重新回落到和杭州一个水平。

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

【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析_第15张图片
北京、上海、深圳为老牌一线城市,价格也一直领跑全国。三城中,北京相对平稳,2021年5月前一直在60000元/平徘徊,2021年6月至2022年6月则维持在63000元/平。上海则呈阶梯状,2021年3月在57000震荡,2021年6、7月则大幅跳跃近69000线,然后在高位呈缓慢下跌趋势。深圳则为大起大落型,2021年2月猛涨至77285元/平后,又一路下跌至63457元/平,跌值13828元/平,跌幅近18%。

后记

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

你可能感兴趣的