【Python】基于Python的百度迁徙3——城内出行强度(附代码)
2020年8月1日更:百度遷徙在5月8日后就不開放了,目前好像只能爬取到3月15日之前的數據,而且爬取的時候會遇到挺多問題的(具體我也不知道,不開放后我就沒爬過了,但是最近很多朋友在問)。評論里關于爬取遇到的問題很多我也沒遇到過,沒辦法幫到你們。如果想直接獲取數據(5月8日前的數據)的話,可以私聊或者電子郵件(chinshuuichi@qq.com)聯系我(會收一點手工費…)。
2020年10月21日更:百度遷徙重新開放了,數據從9月22開始都有。以下舊的代碼需要更改一個地方,即把代碼里所有r=response.text[3:-1]全部替換為r=response.text[4:-1]即可。
目錄
- 簡介
- 效果展示
- 代碼(舊版本——xlwt)
- 代碼(新版本——xlsxwriter)
- 系列文章
簡介
百度遷徙 :百度遷徙
不多逼逼,相關的自己了解。趁這幾天比較好抓取數據,需要的數據就趕緊抓抓抓。
效果展示
本文的數據主要是來自百度遷徙里面的城內出行強度,如下圖。
本文提供的代碼可以批量抓取數據,如抓取所有城市級別的城內出行強度數據放進同一個表格里。因為是城內出行強度,所以不像我前面兩篇文章,本文的城內出行強度只有城市級別,因此最后只有一個表格。
先展示一波抓取后的數據,各位看官看看是不是自己需要的,如下圖。
因為上上圖的城內出行強度的曲線有和去年農歷同期對比,所以我就連去年的指數也抓取了,第一行是日期,去年的日期在前面,今年的在后面,你越晚抓取,今年的日期就越多。這個倒是和上一篇文章抓取的結果挺像的。
代碼(舊版本——xlwt)
# -*- coding: utf-8 -*- import requests #導入請求模塊 import json #導入json模塊 import time #導入時間模塊 import xlrd import xlwtdef internalflow_all_date(CodeDict): #CodeDict字典里所有城市的遷徙規模指數,以全國列表形式列出#######創建一個workbook########workbook = xlwt.Workbook(encoding = 'utf-8') # 創建一個workbook 設置編碼worksheet = workbook.add_sheet('Sheet', cell_overwrite_ok=True) # 創建一個worksheet#################寫入行頭各城市代碼及其城市名###############CitiesOrder = {} #存放城市序號的空字典worksheet.write(0 , 0 , label='城市代碼') #寫入行頭worksheet.write(0 , 1 , label='城市') #寫入行頭times = 1for key , value in CodeDict.items():worksheet.write(times , 0 , label=str(value)) #寫入城市代碼worksheet.write(times , 1 , label=str(key)) #寫入城市名CitiesOrder[str(key)] = times #寫入城市序號字典 times += 1########################開始抓取數據##############################for Area , Code in CodeDict.items():url=f'http://huiyan.baidu.com/migration/internalflowhistory.jsonp?dt=city&id={Code}&date=0'print(f'{Area}:{url}')response=requests.get(url, timeout=2) # #發出請求并json化處理time.sleep(3) r=response.text[3:-1] #去頭去尾data_dict=json.loads(r) #字典化if data_dict['errmsg']=='SUCCESS':data_list=data_dict['data']['list']counter_date = 2 #日期計數器datelist = []for date , index in data_list.items(): #按日期排序datelist.append(date)datelist.sort()for date in datelist:index = data_list[date]# print(f'{date} : {index}')worksheet.write(0 , counter_date , label=date)worksheet.write(CitiesOrder[str(Area)] , counter_date , label=index)counter_date += 1 #日期計數器自加一else:print('錯誤')workbook.save('城市城內出行強度.xls')#臺灣省搜不到數據,因此新建一個字典Cities Cities = {'北京市':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,'溫州市':330500,'嘉興市':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,'香港特別行政區':810000,'澳門特別行政區':820000}if __name__=="__main__":internalflow_all_date(Cities)print('全部完成')代碼(新版本——xlsxwriter)
# -*- coding: utf-8 -*- import requests #導入請求模塊 import json #導入json模塊 import time #導入時間模塊 import xlrd import xlsxwriterdef internalflow_all_date(CodeDict): #CodeDict字典里所有城市的遷徙規模指數,以全國列表形式列出#######創建一個workbook########workbook = xlsxwriter.Workbook('城內出行強度.xlsx') # 創建一個workbook 設置編碼worksheet = workbook.add_worksheet('Sheet') # 創建一個worksheet#################寫入行頭各城市代碼及其城市名###############CitiesOrder = {} #存放城市序號的空字典worksheet.write(0 , 0 , '城市代碼') #寫入行頭worksheet.write(0 , 1 , '城市') #寫入行頭times = 1for key , value in CodeDict.items():worksheet.write(times , 0 , str(value)) #寫入城市代碼worksheet.write(times , 1 , str(key)) #寫入城市名CitiesOrder[str(key)] = times #寫入城市序號字典 times += 1########################開始抓取數據##############################for Area , Code in CodeDict.items():url=f'http://huiyan.baidu.com/migration/internalflowhistory.jsonp?dt=city&id={Code}&date=0'print(f'{Area}:{url}')response=requests.get(url, timeout=2) # #發出請求并json化處理time.sleep(3) r=response.text[4:-1] #去頭去尾data_dict=json.loads(r) #字典化if data_dict['errmsg']=='SUCCESS':data_list=data_dict['data']['list']counter_date = 2 #日期計數器datelist = []for date , index in data_list.items(): #按日期排序datelist.append(date)datelist.sort()for date in datelist:index = data_list[date]# print(f'{date} : {index}')worksheet.write(0 , counter_date , date)worksheet.write(CitiesOrder[str(Area)] , counter_date , index)counter_date += 1 #日期計數器自加一else:print('錯誤')workbook.close()#臺灣省搜不到數據,因此新建一個字典Cities Cities = {'北京市':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,'溫州市':330500,'嘉興市':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,'香港特別行政區':810000,'澳門特別行政區':820000}if __name__=="__main__":internalflow_all_date(Cities)print('全部完成')系列文章
【Python】基于Python的百度遷徙1——遷入、遷出數據(附代碼)
【Python】基于Python的百度遷徙2——遷徙規模指數(附代碼)
【Python】基于Python的百度遷徙4——上班和休閑指數(附代碼)
-----------------------分割線(以下是乞討內容)-----------------------
總結
以上是生活随笔為你收集整理的【Python】基于Python的百度迁徙3——城内出行强度(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ElementUI:文本框实现远程搜索的
- 下一篇: 分布式数据库基础:分布式数据库故障