(一)在高德上申請api開發Key,完了配置html頁面,我這里直接用了官方的demo頁。
<html> <head> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的Key"></script> </head> <body> <div id="container"></div> <script type="text/javascript"> var map = new AMap.Map('container'); /* var map = new AMap.Map('container', { zoom:11,//級別 center: [116.397428, 39.90923],//中心點坐標 viewMode:'3D'//使用3D視圖 }); */ </script> <style type="text/css"> #container {width:800px; height: 500px; } </style> <script type="text/javascript"> AMap.plugin(["AMap.LineSearch"], function() { //實例化公交線路查詢類 var linesearch = new AMap.LineSearch({ pageIndex: 1, //頁碼,默認值為1 pageSize: 1, //單頁顯示結果條數,默認值為20,最大值為50 city: "北京", //限定查詢城市,可以是城市名(中文/中文全拼)、城市編碼,默認值為『全國』 extensions: "all" //是否返回公交線路詳細信息,默認值為『base』 }); //執行公交路線關鍵字查詢 linesearch.search('536', function(status, result) { //打印狀態信息status和結果信息result console.log(status, result); }); }); </script>> </body> </html>
(二)抓包,解析,並存儲為csv
這里需要把py文件和城市公交xlsx放在同一文件夾下。
import urllib from urllib import request import pandas as pd import json import time import random def extratStations(busListSlt): #keyName = busListSlt["key_name"] busName = busListSlt["name"] stationSet = [] stations = busListSlt["busstops"] for bs in stations: tmp = [] tmp.append(bs["id"]) #tmp.append(keyName) tmp.append(busName) tmp.append(bs["name"]) cor = bs["location"].split(",") tmp.append(cor[0]) tmp.append(cor[1]) stationSet.append(tmp) return stationSet def writeStation(listData,fileName): data1 = pd.DataFrame(listData) data1.to_csv("E:\\公交線路\\江蘇省\\江蘇點總量\\{}".format(fileName),index=False,na_rep="NULL",header=["ID","BusName","StationName","LON","LAT"]) def main(cityName): df = pd.read_excel("{}.xlsx".format(cityName),header = None) BaseUrl = "https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=你弟Key&output=json&pageIndex=1&offset=1&" headers = {'User-Agent':"你弟UA"} busStations = [] for bus in df[0]: params = { 'city':cityName, 'keywords':bus } print(bus) paramMerge = urllib.parse.urlencode(params) targetUrl = BaseUrl + paramMerge #print(targetUrl) req = urllib.request.Request(url=targetUrl,headers=headers) res = urllib.request.urlopen(req) content = res.read() jsonData = json.loads(content) #print(jsonData) if (jsonData["buslines"]): busList = jsonData["buslines"] busListSlt = busList[0] busStations += extratStations(busListSlt) #time.sleep(random.random() * random.randint(0,7) + random.randint(0,5)) else: continue writeStation(busStations, "{}點總量.csv".format(cityName)) listC = ["yancheng","yangzhou","zhenjiang"]#你弟城市公交csv for i in listC: main(i)
最終結果如圖: