美文网首页
如何使用高德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