網上摸索了兩三天,最后還看到提供此類服務的第三方軟件,居然要收費,真的是知識創造財富啊。
其實調取地圖不難,更普通的網頁爬蟲差不多,都是用到requests這個函數,區別在於地圖平台需要自己去注冊賬號,然后申請key。
注:地圖平台建議使用高德地圖,因為每天的搜索條數多一些。
第一步,去高德地圖開發平台注冊個人賬戶,然后新建應用,最后會生成一個key
這一步不贅述了,網上有很多大神已經寫了,可參考https://zhuanlan.zhihu.com/p/96838566
第二步,python代碼(代碼是網上大神整理得來的,感謝大神)
import json import math import requests import ProcessTools.tools as tools #大神寫的包 import os key = [''] #你自己申請的key #這里修改高德地圖搜索范圍,最好用行政區划分,這樣返回的數據條不會太多,后面方便寫成循環語句 area_code = {'羅湖區': 440303, '福田區': 440304, '南山區': 440305, '寶安區': 440306, '龍崗區': 440307, '鹽田區': 440308, '龍華區': 440309, '坪山區': 440310, '光明區': 440311} area_road = {'羅湖區': [], '福田區': [], '南山區': [], '寶安區': [], '龍崗區': [], '鹽田區': [], '龍華區': [], '坪山區': [], '光明區': []} def get_busstop(area: str, page: int): data = [] # 保存指定區域的公交站點名稱 parameters = {'key': key[0], 'types': 150700&150701&150702&150703, #高德POI分類編碼表與城市編碼表 'city': area_code[area], 'citylimit': 'true', 'offset': 25, 'page': page, 'output': 'JSON'} res = requests.get('https://restapi.amap.com/v3/place/text?parameters', params=parameters) json_dict = json.loads(res.text) poi_list = json_dict['pois'] count = json_dict['count'] # 當前區域公交站點個數 for poi in poi_list: data.append(poi['name']+ '\t' + poi['address'] + '\t' + poi['location'] + '\t' + poi['adname']) return count, data def mymain(): for area in area_code.keys(): print("當前區域:%s 當前頁數:1" % area) count, roads_info = get_busstop(area, 1) area_road[area] = roads_info count = float(count) total_pages = int(math.ceil(count / 25.0)) for page in range(2, total_pages + 1): print("當前區域: %s 當前頁數: %s" % (area, page)) try: count, roads_info = get_busstop(area, page) area_road[area].extend(roads_info) except: print("未完成") continue for area, roads_info in area_road.items(): print("保存區域%s:" % area) current_path = os.getcwd() tools.saver(roads_info,file_path= current_path+r'\data-output\busstop\{}.txt'.format(area)) print("保存完畢!!!") mymain()
最后,會在路徑下保存所有行政區的所有車站信息。
參考視頻網址:https://www.bilibili.com/video/BV1na411w7df?from=search&seid=1163701277294648103
歡迎討論學習!!!