“青春才几年,疫情占三年”,前段时间被这句疫情梗刷屏,确实,这三年我们的社会经历了太多的跌宕起伏,也让置身其中的我们对未来充满了更大的未知和焦虑。
这三年,承载我们无数梦想、牵动无数人心弦的房价在一座城市如何一路走来,未来又将走向何处?我通过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)
为了方便分析,我直接使用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位数,直接展示在图表上会有数据重叠等问题影响观感,如果有朋友需要这些数据做更深入的研究,可以关注公众号“一鲦鱼”,回复关键字“走势”直接获取数据文件和以上图片。另外,后期我也会考虑找寻更多维度的房产数据,也会在后期更新文章的同时,分享更多的免费数据。