一 、相关代码
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
网友评论