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

时间:2024-03-08 17:03:16

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

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

欢迎讨论学习!!!