疫情可视化--2.爬虫--百度迁徙的疫情数据(各省市各个时间段迁入迁出比例)
疫情可視化–2.爬蟲–百度遷徙的疫情數據(各省市各個時間段遷入遷出比例)
轉載自:【Python】基于Python的百度遷徙1——遷入、遷出數據(附代碼)
 爬取的網站為:百度遷徙
效果展示
把獲得的數據存成一個xls,這張圖里表是泉州一月、二月一共兩個月的遷出數據,左邊第一列是所有城市的編碼(身份證前6位,這也和url要求的編碼一樣),左邊第二列是所有城市的名稱,第一行是日期。
城市編碼
CitiesCode為城市編碼,一行代表一個省份,部分比較長的省份我就分了兩行。
 ProvinceCode為省份編碼。
ChineseAdminiDivisionsDict.py
CitiesCode = {'北京市':110000,'天津市':120000,'石家莊市':130100,'唐山市':130200,'秦皇島市':130300,'邯鄲市':130400,'邢臺市':130500,'保定市':130600,'張家口市':130700,'承德市':130800,'滄州市':130900,'廊坊市':131000,'衡水市':131100,'太原市':140100,'大同市':140200,'陽泉市':140300,'長治市':140400,'晉城市':140500,'朔州市':140600,'晉中市':140700,'運城市':140800,'忻州市':140900,'臨汾市':141000,'呂梁市':141100,'呼和浩特市':150100,'包頭市':150200,'烏海市':150300,'赤峰市':150400,'通遼市':150500,'鄂爾多斯市':150600,'呼倫貝爾市':150700,'巴彥淖爾市':150800,'烏蘭察布市':150900,'興安盟':152200,'錫林郭勒盟':152500,'阿拉善盟':152900,'沈陽市':210100,'大連市':210200,'鞍山市':210300,'撫順市':210400,'本溪市':210500,'丹東市':210600,'錦州市':210700,'營口市':210800,'阜新市':210900,'遼陽市':211000,'盤錦市':211100,'鐵嶺市':211200,'朝陽市':211300,'葫蘆島市':211400,'長春市':220100,'吉林市':220200,'四平市':220300,'遼源市':220400,'通化市':220500,'白山市':220600,'松原市':220700,'白城市':220800,'延邊朝鮮族自治州':222400,'哈爾濱市':230100,'齊齊哈爾市':230200,'雞西市':230300,'鶴崗市':230400,'雙鴨山市':230500,'大慶市':230600,'伊春市':230700,'佳木斯市':230800,'七臺河市':230900,'牡丹江市':231000,'黑河市':231100,'綏化市':231200,'大興安嶺地區':232700,'上海市':310000,'南京市':320100,'無錫市':320200,'徐州市':320300,'常州市':320400,'蘇州市':320500,'南通市':320600,'連云港市':320700,'淮安市':320800,'鹽城市':320900,'揚州市':321000,'鎮江市':321100,'泰州市':321200,'宿遷市':321300,'杭州市':330100,'寧波市':330200,'溫州市':330300,'嘉興市':330400,'湖州市':330500,'紹興市':330600,'金華市':330700,'衢州市':330800,'舟山市':330900,'臺州市':331000,'麗水市':331100,'合肥市':340100,'蕪湖市':340200,'蚌埠市':340300,'淮南市':340400,'馬鞍山市':340500,'淮北市':340600,'銅陵市':340700,'安慶市':340800,'黃山市':341000,'滁州市':341100,'阜陽市':341200,'宿州市':341300,'六安市':341500,'亳州市':341600,'池州市':341700,'宣城市':341800,'福州市':350100,'廈門市':350200,'莆田市':350300,'三明市':350400,'泉州市':350500,'漳州市':350600,'南平市':350700,'龍巖市':350800,'寧德市':350900,'南昌市':360100,'景德鎮市':360200,'萍鄉市':360300,'九江市':360400,'新余市':360500,'鷹潭市':360600,'贛州市':360700,'吉安市':360800,'宜春市':360900,'撫州市':361000,'上饒市':361100,'濟南市':370100,'青島市':370200,'淄博市':370300,'棗莊市':370400,'東營市':370500,'煙臺市':370600,'濰坊市':370700,'濟寧市':370800,'泰安市':370900,'威海市':371000,'日照市':371100,'臨沂市':371300,'德州市':371400,'聊城市':371500,'濱州市':371600,'菏澤市':371700,'鄭州市':410100,'開封市':410200,'洛陽市':410300,'平頂山市':410400,'安陽市':410500,'鶴壁市':410600,'新鄉市':410700,'焦作市':410800,'濮陽市':410900,'許昌市':411000,'漯河市':411100,'三門峽市':411200,'南陽市':411300,'商丘市':411400,'信陽市':411500,'周口市':411600,'駐馬店市':411700,'濟源市':419001,'武漢市':420100,'黃石市':420200,'十堰市':420300,'宜昌市':420500,'襄陽市':420600,'鄂州市':420700,'荊門市':420800,'孝感市':420900,'荊州市':421000,'黃岡市':421100,'咸寧市':421200,'隨州市':421300,'恩施土家族苗族自治州':422800,'仙桃市':429004,'潛江市':429005,'天門市':429006,'神農架林區':429021,'長沙市':430100,'株洲市':430200,'湘潭市':430300,'衡陽市':430400,'邵陽市':430500,'岳陽市':430600,'常德市':430700,'張家界市':430800,'益陽市':430900,'郴州市':431000,'永州市':431100,'懷化市':431200,'婁底市':431300,'湘西土家族苗族自治州':433100,'廣州市':440100,'韶關市':440200,'深圳市':440300,'珠海市':440400,'汕頭市':440500,'佛山市':440600,'江門市':440700,'湛江市':440800,'茂名市':440900,'肇慶市':441200,'惠州市':441300,'梅州市':441400,'汕尾市':441500,'河源市':441600,'陽江市':441700,'清遠市':441800,'東莞市':441900,'中山市':442000,'潮州市':445100,'揭陽市':445200,'云浮市':445300,'南寧市':450100,'柳州市':450200,'桂林市':450300,'梧州市':450400,'北海市':450500,'防城港市':450600,'欽州市':450700,'貴港市':450800,'玉林市':450900,'百色市':451000,'賀州市':451100,'河池市':451200,'來賓市':451300,'崇左市':451400,'海口市':460100,'三亞市':460200,'三沙市':460300,'儋州市':460400,'五指山市':469001,'瓊海市':469002,'文昌市':469005,'萬寧市':469006,'東方市':469007,'定安縣':469021,'屯昌縣':469022,'澄邁縣':469023,'臨高縣':469024,'白沙黎族自治縣':469025,'昌江黎族自治縣':469026,'樂東黎族自治縣':469027,'陵水黎族自治縣':469028,'保亭黎族苗族自治縣':469029,'瓊中黎族苗族自治縣':469030,'重慶市':500000,'成都市':510100,'自貢市':510300,'攀枝花市':510400,'瀘州市':510500,'德陽市':510600,'綿陽市':510700,'廣元市':510800,'遂寧市':510900,'內江市':511000,'樂山市':511100,'南充市':511300,'眉山市':511400,'宜賓市':511500,'廣安市':511600,'達州市':511700,'雅安市':511800,'巴中市':511900,'資陽市':512000,'阿壩藏族羌族自治州':513200,'甘孜藏族自治州':513300,'涼山彝族自治州':513400,'貴陽市':520100,'六盤水市':520200,'遵義市':520300,'安順市':520400,'畢節市':520500,'銅仁市':520600,'黔西南布依族苗族自治州':522300,'黔東南苗族侗族自治州':522600,'黔南布依族苗族自治州':522700,'昆明市':530100,'曲靖市':530300,'玉溪市':530400,'保山市':530500,'昭通市':530600,'麗江市':530700,'普洱市':530800,'臨滄市':530900,'楚雄彝族自治州':532300,'紅河哈尼族彝族自治州':532500,'文山壯族苗族自治州':532600,'西雙版納傣族自治州':532800,'大理白族自治州':532900,'德宏傣族景頗族自治州':533100,'怒江傈僳族自治州':533300,'迪慶藏族自治州':533400,'拉薩市':540100,'日喀則市':540200,'昌都市':540300,'林芝市':540400,'山南市':540500,'那曲市':540600,'阿里地區':542500,'西安市':610100,'銅川市':610200,'寶雞市':610300,'咸陽市':610400,'渭南市':610500,'延安市':610600,'漢中市':610700,'榆林市':610800,'安康市':610900,'商洛市':611000,'蘭州市':620100,'嘉峪關市':620200,'金昌市':620300,'白銀市':620400,'天水市':620500,'武威市':620600,'張掖市':620700,'平涼市':620800,'酒泉市':620900,'慶陽市':621000,'定西市':621100,'隴南市':621200,'臨夏回族自治州':622900,'甘南藏族自治州':623000,'西寧市':630100,'海東市':630200,'海北藏族自治州':632200,'黃南藏族自治州':632300,'海南藏族自治州':632500,'果洛藏族自治州':632600,'玉樹藏族自治州':632700,'海西蒙古族藏族自治州':632800,'銀川市':640100,'石嘴山市':640200,'吳忠市':640300,'固原市':640400,'中衛市':640500,'烏魯木齊市':650100,'克拉瑪依市':650200,'吐魯番市':650400,'哈密市':650500,'昌吉回族自治州':652300,'博爾塔拉蒙古自治州':652700,'巴音郭楞蒙古自治州':652800,'阿克蘇地區':652900,'克孜勒蘇柯爾克孜自治州':653000,'喀什地區':653100,'和田地區':653200,'伊犁哈薩克自治州':654000,'塔城地區':654200,'阿勒泰地區':654300,'石河子市':659001,'阿拉爾市':659002,'圖木舒克市':659003,'五家渠市':659004,'北屯市':659005,'鐵門關市':659006,'雙河市':659007,'可克達拉市':659008,'昆玉市':659009,'臺灣省':710000,'香港特別行政區':810000,'澳門特別行政區':820000}ProvinceCode = {'北京市':110000,'天津市':120000,'河北省':130000,'山西省':140000,'內蒙古自治區':150000,'遼寧省':210000,'吉林省':220000,'黑龍江省':230000,'上海市':310000,'江蘇省':320000,'浙江省':330000,'安徽省':340000,'福建省':350000,'江西省':360000,'山東省':370000,'河南省':410000,'湖北省':420000,'湖南省':430000,'廣東省':440000,'廣西自治區':450000,'海南省':460000,'重慶市':500000,'四川省':510000,'貴州省':520000,'云南省':530000,'西藏自治區':540000,'陜西省':610000,'甘肅省':620000,'青海省':630000,'寧夏自治區':640000,'新疆自治區':650000,'臺灣省':710000,'香港特別行政區':810000,'澳門特別行政區':820000}代碼
# python # -*- coding: UTF-8 -*- """ ================================================= @Project -> File : epidemic_analysis -> population_crawler.py @IDE :PyCharm @Author :Zhou DingJv @Date :2021/6/22 10:11 @Desc : ================================================== """ import requests import json import time import xlrd import xlwt from ChineseAdminiDivisionsDict import CitiesCode, ProvinceCodedef migration_all_date(areaname, classname, no, direction): # 定義生成不同時期,不同城市,不同遷徙方向if no == -1:no = CitiesCode[str(areaname)]#######創建一個workbook########workbook = xlwt.Workbook(encoding='utf-8') # 創建一個workbook 設置編碼worksheet = workbook.add_sheet('Sheet', cell_overwrite_ok=True) # 創建一個worksheet#################寫入行頭各城市代碼及其城市名###############if direction == 'in':nameofdire = '遷入來源地'if direction == 'out':nameofdire = '遷出目的地'CitiesOrder = {} # 存放城市序號的空字典worksheet.write(0, 0, label='城市代碼') # 寫入行頭worksheet.write(0, 1, label=str(nameofdire)) # 寫入行頭times = 1for key, value in CitiesCode.items():worksheet.write(times, 0, label=str(value)) # 寫入城市代碼worksheet.write(times, 1, label=str(key)) # 寫入城市名CitiesOrder[str(key)] = times # 寫入城市序號字典times += 1########################設定日期##############################datelist = [] # 日期列表counter_data = 2 # 日期計數器for date1 in range(20200101, 20200132): # 一月份datelist.append(date1)for date2 in range(20200201, 20200230): # 二月份datelist.append(date2)for date3 in range(20200301, 20200332): # 三月份datelist.append(date3)for date4 in range(20200401, 20200431): # 四月份datelist.append(date4)for date5 in range(20200501, 20200532): # 五月份datelist.append(date5)for date6 in range(20200601, 20200631): # 六月份datelist.append(date6)for date7 in range(20200701, 20200732): # 七月份datelist.append(date7)for date8 in range(20200801, 20200832): # 八月份datelist.append(date8)for date9 in range(20200901, 20200931): # 九月份datelist.append(date9)for date10 in range(20201001, 20201032): # 三月份datelist.append(date10)for date11 in range(20201101, 20201131): # 三月份datelist.append(date11)for date12 in range(20201201, 20201232): # 三月份datelist.append(date12)for date in datelist: # 遍歷所有日期datename = datetime.sleep(1)url = f'http://huiyan.baidu.com/migration/cityrank.jsonp?dt={classname}&id={no}&type=move_{direction}&date={date}'print(url)a = 1while (a == 1):a = 2try:response = requests.get(url, timeout=2) # 發出請求并json化處理except:a = 1# response = requests.get(url, timeout=2) # 發出請求并json化處理time.sleep(1)r = response.text[4:-1] # 去頭去尾data_dict = json.loads(r) # 字典化if data_dict['errmsg'] == 'SUCCESS':data_list = data_dict['data']['list']time.sleep(1)################寫入###############worksheet.write(0, counter_data, label=datename) # 寫入表頭————日期for a in range(len(CitiesCode)):worksheet.write(a + 1, counter_data, label=0) # 先把當前日期下該列所有城市值置0############獲取數據###########for i in range(len(data_list)):city_name = data_list[i]['city_name'] # 城市名value = data_list[i]['value'] # 當日遷徙量所占百分比值##############寫入#############worksheet.write(CitiesOrder[str(city_name)], counter_data, label=value) # 查找城市序號字典,在對應的行里寫入相應的值counter_data += 1 # 日期計數器自加一workbook.save(f"{areaname}-{nameofdire}.xls") # 保存def circu_exe_direction(areaname, classname, no):mukous = ['in', 'out']for mukou in mukous:migration_all_date(areaname, classname, no, mukou)print(str(areaname) + '---', '完成')if __name__ == "__main__":circu_exe_direction('武漢市', 'city', -1)# circu_exe_direction('威海市', 'city', -1)# circu_exe_direction('昌吉回族自治州', 'city', -1)# circu_exe_direction('福建省', 'province', 350000)# circu_exe_direction('湖北省', 'province', 420000)# circu_exe_direction('北京市', 'province', 110000)# circu_exe_direction('全國', 'country', 0)print('全部完成')中間有一段硬核代碼(懂的都懂)沒有改,因為之前只是爬取單月的,懶的8行
如果要獲取市的數據,直接就circu_exe_direction(‘泰安市’,‘city’,-1)就行了,最后數字填-1它就自己去字典里查對應的城市編碼。另外名字一定要填官方的名字,不能多字少字,不然字典找不到,或者可以事先看看字典里怎么寫的,反正我按省份分行的,很好查。
如果是省的話,就需要circu_exe_direction(‘福建省’,‘province’,350500),中間要改成province(直轄市也需要改成province),最后的編碼要手動輸入,不知道編碼的百度一下就行。
如果要獲取全國數據的話,就需要circu_exe_direction(‘全國’,‘country’,0),注意中間變成了country。
總結
以上是生活随笔為你收集整理的疫情可视化--2.爬虫--百度迁徙的疫情数据(各省市各个时间段迁入迁出比例)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 电脑组装笔记:手把手教你如何自己组装电脑
- 下一篇: 安装python要注意什么_安装pyth
