冬天來了,用Python看看哪裡的人最喜歡吃火鍋
阿新 • • 發佈:2021-11-25
本文僅用於學習和交流使用,不具有任何商業價值,如有問題,請與我聯絡,我將即時處理。
資料來源於百度地圖。開發者工具就不說了,直接上程式碼:
1 """ 2 爬取百度地圖全國火鍋店並可視化 3 """ 4 import pprint 5 6 import openpyxl as op 7 import requests 8 9 # 熱門城市 10 wb_hotCity = op.Workbook() # 工作簿 11 ws_hotCity = wb_hotCity.create_sheet(index=0) 12 ws_hotCity.cell(row=1, column=1, value='城市') 13 ws_hotCity.cell(row=1, column=2, value='數量') 14 15 # 省份 16 wb_province = op.Workbook() # 工作簿 17 ws_province = wb_province.create_sheet(index=0) #工作表 18 ws_province.cell(row=1, column=1, value='省份') 19 ws_province.cell(row=1, column=2, value='數量') 20 21 # 省份下的市數量 22 wb_province_cities = op.Workbook()23 ws_province_cities = wb_province_cities.create_sheet(index=0) 24 ws_province_cities.cell(row=1, column=1, value='城市') 25 ws_province_cities.cell(row=1, column=2, value='數量') 26 27 def get_json(): 28 url = 'https://xx.baixx.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&c=1&wd=火鍋店&da_src=shareurl&on_gel=1&l=4&gr=1&b=(6818483.628395475,-1378890.6182441516;19500319.04895588,5539245.839424342)&pn=0&device_ratio=2&auth=G0dY4cVy9WzEHUcbN2egDb@CE3v8H2ESuxLBNRzEzNBtDcnVDpneC@BvYgP1PcGCgYvjPuVtvYgPMGvgWv@uVtvYgPPxRYuVtvYgP@vYZcvWPCuVtvYgP@ZPcPPuVtvYgPhPPyheuVtvhgMuxVVty1uVtCGYuVt1GgvPUDZYOYIZuVt1cv3uVtGccZcuVtPWv3Guxt58Jv7ucvY1SGpuxLt@jUfJxvYlcvIKMNQTXZbegHcEWe1GD8zv7u@ZPuVtc3CuVteuVtegvcguxLBNRzEzNBtquTTGdFrZZWuV&seckey=Ml81XZ+wbx7jyS5hXlEdUOZNM5KJW3eWH1zi1SkgdUw=,2ccphtdcku0z52vCIEYIggYcdu8QHAJF1lQ+5wl2NMlaWIlTiCrONly/LJX4jdosle2Jf9LuHi8DHeLXtZRfnXu5J/0ctPoquwFQq6tZMA4TzSUjV2KQkSKzylzZf30ZOmZRhyug2Upr+mVaZqFcTu6hRc8/N3XYrjIVwQLMken5x8Iaqv13CW13nUMjW9LO&tn=B_NORMAL_MAP&nn=0&u_loc=13182436,2819866&ie=utf-8&t=1637824275666&newfrom=zhuzhan_webmap' 29 headers = { 30 'Cookie':cooikes, 31 'Referer':'https://map.baidu.com/search/xxxx/@13000533.070537817,2742247.240299427,4.95z?querytype=s&c=1&wd=%E7%81%AB%E9%94%85%E5%BA%97&da_src=shareurl&on_gel=1&l=4&gr=1&b=(6818483.628395475,-1378890.6182441516;19500319.04895588,5539245.839424342)&pn=0&device_ratio=2', 32 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 33 } 34 response = requests.get(url=url, headers=headers) 35 return response.json() 36 37 # 熱門城市 38 def get_hotCities(json_data): 39 # 獲取熱門城市數量 40 hotCities = json_data['content'] 41 for item in hotCities: 42 cityName = item['name'] 43 num = item['num'] 44 ws_hotCity.append([cityName, num]) 45 46 def get_province(json_data): 47 # 獲取其他省市的總數量 48 moreProvince = json_data['more_city'] 49 for item in moreProvince: 50 province = item['province'] # 省份 51 num = item['num'] # 數量 52 ws_province.append([province, num]) # 各省總數 53 54 def get_cities(json_data): 55 # 獲取省下面市的數量 56 provinceCities = json_data['more_city'] 57 print(type(provinceCities)) # list 58 for item in provinceCities: 59 # print(item['city']) 60 for needitem in item['city']: 61 city = needitem['name'] 62 num = needitem['num'] 63 print(city, num) 64 ws_province_cities.append([city, num]) # 各省下城市總數量 65 json_data = get_json() 66 # pprint.pprint(json_data) 67 if __name__ == "__main__": 68 get_hotCities(json_data) 69 get_province(json_data) 70 get_cities(json_data) 71 wb_hotCity.save('熱門城市火鍋店數量.xlsx') 72 wb_province.save('各省總火鍋店數量.xlsx') 73 wb_province_cities.save('各省城市火鍋店數量.xlsx') 74 wb_hotCity.close() 75 wb_province.close() 76 wb_province_cities.close()
儲存結果,三張圖:
雖然資料來源於百度地圖,為了學習,用python也做個地圖:
1 """ 2 首先是全國火鍋店分佈數量 3 """ 4 import pandas as pd 5 from pyecharts.charts import Map 6 from pyecharts.globals import ThemeType 7 import pyecharts.options as opts 8 9 data = pd.read_excel('各省總火鍋店數量.xlsx') #用熊貓讀取資料 10 # 提取出省份和數量 11 provinceList = data['省份'].tolist() # 將省份名稱作為列表 12 num = data['數量'].tolist() # 將數量也做成列表 13 print(provinceList) 14 15 provinces = [] 16 # 修正省份引數,因為pyecharts只支援前面有標識的字,內蒙古自治區要處理成內蒙古,廣西壯族自治區要處理成廣西 17 for i in provinceList: 18 if '省' and '市' in i: 19 provinces.append(i[:-1]) 20 elif '內蒙古' in i: # 處理內蒙古自治區為內蒙古 21 neimenggu = i[0:3] 22 provinces.append(neimenggu) 23 elif '自治區' in i: # 處理類似廣西壯族自治區和寧夏回族自治區之類的字元廣西和寧夏 24 provinces.append(i[0:2]) 25 else: 26 provinces.append(i[:-1]) # 處理黑龍江省成黑龍江 27 # print(len(provinceList)) # 比較長度是否相等 28 # print(len(provinces)) # 比較長度是否相等 29 30 # 開始繪圖 31 map = ( 32 Map(init_opts=opts.InitOpts(width='1280px',height='960px', theme=ThemeType.VINTAGE)) 33 .add('數量', [list(z) for z in zip(provinces, num)], 'china') # 中國地圖 34 .set_global_opts( 35 title_opts=opts.TitleOpts(title='全國火鍋店分佈數量',), 36 legend_opts=opts.LegendOpts(pos_left='10%', pos_top='10%') 37 ) 38 ).render('全國火鍋店分佈數量.html')
執行截圖:
資料發現,全國火鍋店數量最多的不是四川,而是山東,做下山東地圖視覺化:
1 """ 2 做一下全國火鍋店數量最多的省的視覺化 3 """ 4 import pandas as pd 5 from pyecharts.charts import Map 6 import pyecharts.options as opts 7 from pyecharts.globals import ThemeType 8 9 # 讀取資料 10 data = pd.read_excel('各省城市火鍋店數量.xlsx') 11 cities = data['城市'].tolist() 12 counts = data['數量'].tolist() 13 # 資料發現山東最多,做下山東的圖 14 city = [] 15 count = [] 16 flag = 0 17 for i in range(0, len(cities)): 18 if cities[i] == '青島市': 19 flag = 1 20 if flag: 21 city.append(cities[i]) 22 count.append(int(counts[i])) 23 if cities[i] == '日照市': 24 city.append(cities[i]) # 提取日照 25 count.append(int(counts[i])) # 將日照的數量提取 26 break 27 28 print(city, count) #列印符合預期 29 30 c = ( 31 Map(init_opts=opts.InitOpts(width='1280px', height='960px', theme=ThemeType.VINTAGE)) 32 .add("山東火鍋分佈", [list(z) for z in zip(city, count)], "山東") 33 .set_global_opts( 34 title_opts=opts.TitleOpts(title="山東火鍋店數量分佈"), 35 visualmap_opts=opts.VisualMapOpts(), 36 legend_opts=opts.LegendOpts(pos_left='5%', pos_top='10%'), 37 ) 38 ).render("山東火鍋店數量分佈.html")
截圖:
收工。