python_爬蟲爬取高德地圖公交線路_贈高德地圖key

python_爬取高德地圖某條公交線路_贈高德地圖key

原創不易,轉發請帶本文鏈接

使用高德地圖可以搜索單條公交線路,使用代碼可以一次性爬取高德地圖公交
贈送一個企業高德key,大部分高德的接口日訪問量30萬
88d2e276d696bb7d9cbbc748bd11a405

import json
import pandas as pd
import requests
from utils.geolocataion_converting import gcj02_to_wgs84
from utils.read_write import writeOneCSV, writeCSV

'''
    此文件用於使用公交線路號爬取指定公交線路數據
'''

header = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Connection': 'keep-alive',
    'Host': 'restapi.amap.com',
    'Origin': 'https://restapi.amap.com',
    'Referer': 'https://restapi.amap.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0',
}

# 開始請求高德地圖的API
def get_geo(linename):
    url = "https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=88d2e276d696bb7d9cbbc748bd11a405&output=json&pageIndex=1&" \
          "city=%E6%B7%B1%E5%9C%B3&offset=1&keywords=" + str(
        linename) + "路" + "&platform=JS&logversion=2.0&appname=file%3A%2F%2F%2FD%3A%2F%25E9%25A1%25B9%25E7%259B%25AE%25E6%2596%2587%25E4%25BB%25B6%2F%25E5%25BB%25BA%25E8%25A7%2584%25E9%2599%25A2%2F%25E5%2589%258D%25E7%25AB%25AF%25E8%258E%25B7%25E5%258F%2596%25E5%2585%25AC%25E4%25BA%25A4%25E8%25B7%25AF%25E7%25BA%25BF%25E6%2595%25B0%25E6%258D%25AE%2Fbus_route.html&csid=D177451A-E355-4D49-A2CB-B87937FD9208&sdkversion=1.4.15"
    try:
        # 添加header
        response = requests.get(url, headers=header)
        data = json.loads(response.text)
        return data
    except ValueError:
        print("出現異常,請重新運行!" + str(ValueError))


#把數據處理成arcgis能夠處理的線
def write_polyline(LID, polyline, path):
    lon_lat_list = polyline.split(';')
    geo_list = []
    for index in range(len(lon_lat_list)):
        geo = []
        lonlat = lon_lat_list[index].split(',')
        lon = lonlat[0]
        lat = lonlat[1]
        geo.append(LID)
        geo.append(index)
        geo.append(lon)
        geo.append(lat)
        geo_list.append(geo)
    writeCSV(geo_list, path)


def write_polyline_wgs84(LID, polyline, path):
    lon_lat_list = polyline.split(';')
    geo_list = []
    for index in range(len(lon_lat_list)):
        geo = []
        lonlat = lon_lat_list[index].split(',')
        lon = lonlat[0]
        lat = lonlat[1]
        lon = float(lon)
        lat = float(lat)
        lng, lat = gcj02_to_wgs84(lon, lat)
        geo.append(LID)
        geo.append(index)
        geo.append(lng)
        geo.append(lat)
        geo_list.append(geo)
    writeCSV(geo_list, path)


def write_bus_stops(LID,all_bus_name, busstops, path):
    bus_station_list = []
    for station in busstops:
        bus_station = []
        name = station['name']
        location = station['location']
        id = station['id']
        sequence = station['sequence']
        lonlat = location.split(',')
        lon = lonlat[0]
        lat = lonlat[1]
        bus_station.append(LID)
        bus_station.append(all_bus_name)
        bus_station.append(name)
        bus_station.append(id)
        bus_station.append(sequence)
        bus_station.append(lon)
        bus_station.append(lat)
        bus_station_list.append(bus_station)
    writeCSV(bus_station_list, path)


def write_bus_stops_wgs84(LID,all_bus_name, busstops, path):
    bus_station_list = []
    for station in busstops:
        bus_station = []
        name = station['name']
        location = station['location']
        sequence = station['sequence']
        id = station['id']
        lonlat = location.split(',')
        lon = lonlat[0]
        lat = lonlat[1]
        lon = float(lon)
        lat = float(lat)
        lng, lat = gcj02_to_wgs84(lon, lat)
        bus_station.append(LID)
        bus_station.append(all_bus_name)
        bus_station.append(name)
        bus_station.append(id)
        bus_station.append(sequence)
        bus_station.append(lng)
        bus_station.append(lat)
        bus_station_list.append(bus_station)
    writeCSV(bus_station_list, path)


if __name__ == "__main__":
    # 序號	業戶名稱	 線路編號	起點站	終點站	 上行途徑站點	 下行途徑站點
    src = 'D:\data\jianguiyaun\\2019年9月深圳公交數據.xlsx'
    geo_path = 'D:\data\jianguiyaun\\深圳單向公交線路數據\\'
    route = pd.read_excel(src)
    route.drop(0)
    for row in route.itertuples(index=True, name='Pandas'):
        LID = getattr(row, '序號')
        bus_name = getattr(row, '線路編號')
        json_data = get_geo(bus_name)
        bus = []
        if int(json_data['count']) > 0:
            id = json_data['buslines'][0]['id']
            start_stop = json_data['buslines'][0]['start_stop']
            end_stop = json_data['buslines'][0]['end_stop']
            company = json_data['buslines'][0]['company']
            basic_price = json_data['buslines'][0]['basic_price']
            citycode = json_data['buslines'][0]['citycode']
            distance = json_data['buslines'][0]['distance']
            bus.append(LID)
            bus.append(id)
            bus.append(bus_name)
            bus.append(start_stop)
            bus.append(end_stop)
            bus.append(citycode)
            bus.append(distance)
            bus.append(company)
            bus.append(basic_price)
            writeOneCSV(bus,geo_path+'geo_bus.csv')
            polyline = json_data['buslines'][0]['polyline']
            write_polyline(LID,polyline,geo_path+'geo_bus_line_GCJ02.csv')
            write_polyline_wgs84(LID, polyline, geo_path + 'geo_bus_line_WGS84.csv')

            busstops = json_data['buslines'][0]['busstops']
            write_bus_stops(LID, bus_name,busstops, geo_path + 'geo_bus_station_GCJ02.csv')
            write_bus_stops_wgs84(LID, bus_name,busstops, geo_path + 'geo_bus_station_WGS84.csv')

geolocataion_converting.py
2019深圳公交線路數據
read_write.py
如需幫忙抓取某條公交車線路數據,請私聊我,我這暫時只有深圳的公交線路數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章