一 、相關(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)信息,如下圖所示。

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

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