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


这里写目录标题

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

引子 “青春才几年,疫情占三年”,前段时间被这句疫情梗刷屏,确实,这三年我们的社会经历了太多的跌宕起伏,也让置身其中的我们对未来充满了更大的未知和焦虑。
这三年,承载我们无数梦想、牵动无数人心弦的房价在一座城市如何一路走来,未来又将走向何处?我通过python代码在房天下平台抓取了19个(新)一线城市近三年的二手房均价,尝试管窥一斑。
一线城市的范围采用百度百科词条的2022年一线及新一线城市榜单,分别为:北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛。
python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

分析网页 打开房天下网站,可以看到菜单栏有“查房价”菜单
python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

切换tab后,下拉页面可以看到均价走势图就有三年的选项
python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

F12检查页面,查看相应元素,找到数据接口
python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

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

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

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

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

编写程序
import time import requests from ast import literal_eval import xlwtdef 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 + 1def 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 + 1def 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.textif __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】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

可视化分析 为了方便分析,我直接使用Excel图表工具进行了房价走势的简单对比。
将城市的最新房价排序,把均价相近的三个城市分成一组,这样纵坐标的粒度更细,房价走势起伏更加明显。
第一组:长沙、佛山、重庆 python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析
文章图片

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

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

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

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

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

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

北京、上海、深圳为老牌一线城市,价格也一直领跑全国。三城中,北京相对平稳,2021年5月前一直在60000元/平徘徊,2021年6月至2022年6月则维持在63000元/平。上海则呈阶梯状,2021年3月在57000震荡,2021年6、7月则大幅跳跃近69000线,然后在高位呈缓慢下跌趋势。深圳则为大起大落型,2021年2月猛涨至77285元/平后,又一路下跌至63457元/平,跌值13828元/平,跌幅近18%。
后记 【python|【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析】当然,城市房价的涨跌是受到政策、人口、经济等等综合因素的影响,未来的走势也同样如此,而且具体到每个楼盘又会受到交通、商业、教育等等更加复杂的环境因素影响。仅仅凭几个月的价格数字,无法做出太多有意义的评判,而且作为非房产从业人员,以上也仅仅是我基于这些往期数据的简单描述。
由于房价数值大多为5位数,直接展示在图表上会有数据重叠等问题影响观感,如果有朋友需要这些数据做更深入的研究,可以关注公众号“一鲦鱼”,回复关键字“走势”直接获取数据文件和以上图片。另外,后期我也会考虑找寻更多维度的房产数据,也会在后期更新文章的同时,分享更多的免费数据。

    推荐阅读