调用高德API获取城市公交车站信息


网上摸索了两三天,最后还看到提供此类服务的第三方软件,居然要收费,真的是知识创造财富啊。

其实调取地图不难,更普通的网页爬虫差不多,都是用到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

欢迎讨论学习!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM