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

一 、相關(guān)代碼

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') 

二、相關(guān)代碼說明/解釋

1. 首先,我們要載入requests模塊;

import requests


2. 導(dǎo)入pandas庫;

import pandas as pd


3. 輸入你自己在高德申請(qǐng)的key、搜索的關(guān)鍵詞、城市對(duì)應(yīng)的編碼;

本例選擇的關(guān)鍵詞為“圖書館”,地區(qū)為廣州市(相應(yīng)的編碼為440110)。

parameters = {'key': '35461ff6217745537e0f163d6324022c'}
parameters.update( {'keywords': '圖書館',
                    'city':'440100',
                    'citylimit': True
                   })

4. 構(gòu)建一個(gè)最終的結(jié)果列表pois;

pois = []


5. 構(gòu)建pg_no,每次給不一樣的可選參數(shù)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

具體步驟:

  • 構(gòu)建可選參數(shù)page的值為“ pg_no”;

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

  • 再用“extend”的方法,把返回?cái)?shù)據(jù)中的結(jié)果“data['pois']”存入pois中;

pois.extend(data['pois'])

  • 接著計(jì)算 :累積實(shí)際結(jié)果數(shù);

no_pois_this_search = len(pois)

  • 計(jì)算: 應(yīng)有的實(shí)際數(shù)量;

no_pois = int(data['count'])

  • 如果累積實(shí)際結(jié)果數(shù) >= 應(yīng)有的實(shí)際數(shù)量,則結(jié)束迭代跳出,否則找下一頁數(shù)據(jù),把 pg_no加1
if (no_pois_this_search >= no_pois): 
        break                                   
    else:
        pg_no +=1

7. 使用pandas 模塊處理數(shù)據(jù);

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]
  • 要注意各欄位之間空格的數(shù)量必須一致;

  • 由于本人python基礎(chǔ)薄弱、能力有限,以上輸入的欄位僅僅是要求中的部分欄位,嘗試輸入過“keyword”、“adcode”、“pcode”、“citycode”,結(jié)果會(huì)報(bào)錯(cuò),暫時(shí)未弄明白報(bào)錯(cuò)的原因,因此暫時(shí)無法達(dá)到老師的具體要求。


9. 使用pandas模塊輸出數(shù)據(jù),文件格式分別為tsv和json,文件名為“output”(可自行命名);

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

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


10. 運(yùn)行后,即可獲得相應(yīng)的tsv檔和json檔,里面包含了你想獲得的相關(guān)信息,如下圖所示。

得出兩個(gè)文檔.png

output.tsv文檔內(nèi)容

tsv.png

output.json文檔內(nèi)容

json.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容