【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 xlwtdef writeCol1(line, city, arr):sheet.write(line, 0, city)i = 1for 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 = 2for 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 = 1for 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 + "=====數據獲取異常====")continueline = line + 1time.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位數,直接展示在圖表上會有數據重疊等問題影響觀感,如果有朋友需要這些數據做更深入的研究,可以關注公眾號“一鰷魚”,回復關鍵字“走勢”直接獲取數據文件和以上圖片。另外,后期我也會考慮找尋更多維度的房產數據,也會在后期更新文章的同時,分享更多的免費數據。
總結
以上是生活随笔為你收集整理的【python】我用python抓取了19个一线城市三年的房价数据,并做了走势分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AD9361 介绍 (上)
- 下一篇: android studio 快捷键修改