美文网首页
如何使用高德API(搜索POI)

如何使用高德API(搜索POI)

作者: Autistic_8d3b | 来源:发表于2019-05-04 18:31 被阅读0次

    一 、相关代码

    import requests
    import pandas as pd
    
    parameters = {'key': '35461ff6217745537e0f163d6324022c'}
    parameters.update( {'keywords': '图书馆',
                        'city':'440100',
                        'citylimit': True
                       })
    
    pois = []
    pg_no = 1
    
    while True:
        parameters.update({'page':pg_no}) 
    
        r = requests.get ("http://restapi.amap.com/v3/place/text", params=parameters)
        data = r.json()
    
        pois.extend(data['pois'])       
    
        
        no_pois_this_search = len(pois) 
        no_pois = int(data['count'])     
    
    
        if (no_pois_this_search >= no_pois): 
            break                                   
        else:
            pg_no +=1                               
    
            
    
    df_input = pd.DataFrame(pois)
            
    
    select_fields = "id name    type    typecode    location    tel pname   cityname    adname  biz_ext".split("\t")
    df = df_input[select_fields]
    
    
    df.to_csv("output.tsv", encoding="utf8", sep='\t') 
    df.to_csv("output.json", encoding="utf8", sep='\t') 
    

    二、相关代码说明/解释

    1. 首先,我们要载入requests模块;

    import requests


    2. 导入pandas库;

    import pandas as pd


    3. 输入你自己在高德申请的key、搜索的关键词、城市对应的编码;

    本例选择的关键词为“图书馆”,地区为广州市(相应的编码为440110)。

    parameters = {'key': '35461ff6217745537e0f163d6324022c'}
    parameters.update( {'keywords': '图书馆',
                        'city':'440100',
                        'citylimit': True
                       })
    

    4. 构建一个最终的结果列表pois;

    pois = []


    5. 构建pg_no,每次给不一样的可选参数page值;

    pg_no = 1


    6. 不断地迭代,直到break跳出;

    while True:
        parameters.update({'page':pg_no})  
    
        r = requests.get ("http://restapi.amap.com/v3/place/text", params=parameters)
        data = r.json()
    
        pois.extend(data['pois'])       
    
        
        no_pois_this_search = len(pois) 
        no_pois = int(data['count'])     
    
    
        if (no_pois_this_search >= no_pois): 
            break                                   
        else:
            pg_no +=1
    

    具体步骤:

    • 构建可选参数page的值为“ pg_no”

    parameters.update({'page':pg_no})

    • 再用“extend”的方法,把返回数据中的结果“data['pois']”存入pois中;

    pois.extend(data['pois'])

    • 接着计算 :累积实际结果数;

    no_pois_this_search = len(pois)

    • 计算: 应有的实际数量;

    no_pois = int(data['count'])

    • 如果累积实际结果数 >= 应有的实际数量,则结束迭代跳出,否则找下一页数据,把 pg_no加1
    if (no_pois_this_search >= no_pois): 
            break                                   
        else:
            pg_no +=1
    

    7. 使用pandas 模块处理数据;

    df_input = pd.DataFrame(pois)


    8. 选择你所想要输出的栏位;

    select_fields = "id name    type    typecode    location    tel pname   cityname    adname  biz_ext".split("\t")
    df = df_input[select_fields]
    
    • 要注意各栏位之间空格的数量必须一致;

    • 由于本人python基础薄弱、能力有限,以上输入的栏位仅仅是要求中的部分栏位,尝试输入过“keyword”、“adcode”、“pcode”、“citycode”,结果会报错,暂时未弄明白报错的原因,因此暂时无法达到老师的具体要求。


    9. 使用pandas模块输出数据,文件格式分别为tsv和json,文件名为“output”(可自行命名);

    df.to_csv("output.tsv", encoding="utf8", sep='\t')

    df.to_csv("output.json", encoding="utf8", sep='\t')


    10. 运行后,即可获得相应的tsv档和json档,里面包含了你想获得的相关信息,如下图所示。

    得出两个文档.png

    output.tsv文档内容

    tsv.png

    output.json文档内容

    json.png

    相关文章

      网友评论

          本文标题:如何使用高德API(搜索POI)

          本文链接:https://www.haomeiwen.com/subject/ijozmqtx.html