高德地图POI爬取_Python
高德地图POI
官方文档:https://lbs.amap.com/api/webservice/guide/api/search#introduce
官网控制台:https://lbs.amap.com/
- 用于注册并且获取URL需要的Key
- 用于查看能够搜索POI的配额
- 注册好后点击控制台,在应用管理中创建应用——>服务平台选择Web服务——>获取Key
官方文档解释
高德地图的搜索API是一种HTTP接口,提供了多种查询POI信息的能力。
HTTP接口则必须要使用URL进行请求,也就要通过URL进行参数配置(URL为统一资源定位器),不同的参数获取到不同的数据
URL由三部分组成
完整的URL
https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&output=xml&offset=20&page=1&key=<用户的key>&extensions=all
该HTTP接口通用前缀,这部分URL是写死的,不需要更改
搜索模式,共有4种搜索模式:关键字搜索、周边搜索、多边形搜索、ID查询
请求参数,请求参数可以有很多,请求参数跟在搜索模式中的
?后面。一个参数对应一个值(可以对应多个,见官方文档),表现形式为参数名在前,参数值在后,中间用等于号隔开,即key=value,不同的参数之间使用&隔开。1. https://restapi.amap.com/v3/place/
2. text? (还可以为 around? 、 polygon? 、 detail?)
3. keywords=北京大学&city=beijing&output=xml&offset=20&page=1&key=<用户的key>&extensions=all
请求参数列表全部在官网中,不同的搜索模式参数列表有部分不同,根据不同模式选择请求参数

- 请求正确会返回参数,四个搜索模式返回的参数相同,参数的处理见后文程序解释

URL确定示例:多边形区域POI搜索
搜索所需范围:

搜索所需POI类型:
除了风景名胜、政府机构社会团体、商务住宅、公司企业、道路附属设施、地名地址信息、事件活动等所有POI
基础URL确定:
根据官网参数列表,关键参数为polygon与types,types在Python程序中拼接
polygon为经纬度坐标,可以在百度拾取坐标系统中点选:http://api.map.baidu.com/lbsapi/getpoint/

https://restapi.amap.com/v3/place/polygon?key=<用户自己的key>&polygon=119.182037,26.075818|119.179558,26.069976|119.180349,26.064297|119.185738,26.065887|119.191919,26.064978|119.190841,26.060013|119.192997,26.056215|119.196473,26.055201|119.192916,26.061725|119.193814,26.062309|119.19482,26.060297|119.196329,26.061011|119.194245,26.064808|119.192808,26.068411|119.184795,26.075064|119.182037,26.075818&city=350100(可选,避免经纬度与城市出现偏差)
Python程序解释
主程序
- 为了查看清晰,将源代码中一些用于显示的代码和注释删除
- 在程序的每一步中,如果对变量的内容、类型不清楚,可以用代码
print(data)print(type(data))在控制台中输出相应的内容进行查看
# API的URL,在这里进行了结构化处理
# URL分成三段便于在for循环中拼接URL,从而改变关键字条件
main_url_head='http://restapi.amap.com/v3/place/text?key=c3e7956a4c43bdbe87e03d2fe6af7545&city=350802&keywords=&types='
main_url_mid='&offset=20&page='
main_url_tail='&extensions=all'
# 用于储存结果数据,放置到csv中
x = []
# 用于计数
num = 0
# sort为搜索类型(即请求参数列表中的types)
sort=['010000','020000','030000','040000','040000','040000','050000','060000','070000','080000','090000','100000','140000','150000','160000','200000',]
# 对每种sort(即)
for i in sort:
# 最新文档中表明可以一次查询100页,如果数据未超过
for page in range(1,46):
# 对URL进行拼接,改变sort、page变量,
# 如果页数到达for循环限制的最大值,则可以考虑进行POI类型(types)更细的切分
thisUrl = main_url_head + i +main_url_mid + str(page) +main_url_tail
# 获取POI数据,通过requests.get()发起HTTP请求,使用data变量接受返回的数据
data = requests.get(thisUrl)
# 转为JSON格式
s = data.json()
# 解析JSON,
aa = s["pois"]
# 若解析的JSON为空,即当前的数据不够45页(即没有达到限制),返回
if len(aa) == 0:
break
# 根据官网的返回参数列表,选择想要的数据,并且对每条POI进行存储
for k in range(0, len(aa)):
s1 = aa[k]["name"] # ["name"]等即为上文提到的返回结果参数中的成员,在这里可以任意选择参数并储存
s2 = aa[k]["type"]
if("address" in aa[k]): # 有些返回的Json对象中不存在address字段,在使用时最好先进行判断
s3 = aa[k]["address"]
else:
s3 = ""
s4 = aa[k]["location"]
x.append([s1, s2, s3, s4])
# 将数据结构化存储至规定目录的CSV文件中
c = pd.DataFrame(x)
c.to_csv('./DataVer4.csv', encoding='utf-8-sig')
经纬度分割程序
# 打开爬取的数据
with open('DataVer4.csv','r') as f:
reader = csv.reader(f)
next(reader)
rowSplited = []
output = []
for row in reader:
rowSplited = row[0:4]
#将第4列,即经纬度所在列根据符号 ',' 进行分割,并储存数据
rowSplited.append(row[4].split(',')[0])
rowSplited.append(row[4].split(',')[1])
output.append(rowSplited)
# 将处理后的数据存放到新的csv文件中
with open('DataVer4_processed.csv','w',newline='',encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerows(output)
高德地图POI爬取_Python的更多相关文章
- 百度地图POI爬取
我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...
- 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。
1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...
- 根据关键字获取高德地图poi信息
根据关键字获取高德地图poi信息 百度地图和高德地图都提供了根据关键字获取相应的poi信息的api,不过它们提供给普通开发者使用的次数有限无法满足要求.其次百度地图返回的poi中位置信息不是经纬度,而 ...
- 高德地图POI采集(URL-API)
新手从零学起,成功跑通,记一下,技术大神们多多指点. ———————————————— 1-概述 POI:兴趣点.对于百度.高德等电子地图来说,一个POI是地图上的一个店铺/商场/小区等等. 这次要解 ...
- html5或者移动端暴力定位城市-高德地图,可以取到当前的城市code,亲测好用
复制 粘贴到html中打开!!!!! <!doctype html> <html> <head> <meta charset="utf-8" ...
- 百度&高德地图小区景点边界轮廓实现
经常的我们在使用地图功能时,会发现在选择一个小区或者一个热门景点的时候,地图上面会给出其边界轮廓,能够方便我们知道其范围大小,有时候在我们使用地图组件的时候,也会面临着类似的需求.比如在地图上面标识出 ...
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)
好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...
- 高德地图-搜索服务-POI搜索
高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...
- 教你如何拔取百度地图POI兴趣点
教你如何拔取百度地图POI兴趣点 通过聚合数据提供的接口,获取百度地图的POI兴趣点,并存储至数据库中. 实现: 1.聚合数据百度POI接口说明 调用聚合数据,首先得注册聚合.聚合数据提供的百度地 ...
随机推荐
- XCTF-WEB-高手进阶区-Web_python_template_injection-笔记
Web_python_template_injection o(╥﹏╥)o从这里开始题目就变得有点诡谲了 网上搜索相关教程的确是一知半解,大概参考了如下和最后的WP: http://shaobaoba ...
- C#LeetCode刷题之#21-合并两个有序链表(Merge Two Sorted Lists)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3818 访问. 将两个有序链表合并为一个新的有序链表并返回.新链表 ...
- Vuex + localStorage + html实现简易todolist
1.项目结构 2.Vuex,什么是Vuex? 官方文档上的介绍是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种 ...
- drop、truncate、delete功能介绍和三者间区别
一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...
- mongodb在win10下的安装和配置
一.准备 下载mongodb https://www.mongodb.com/download-center/community 该实例中使用的是:mongodb-win32-x86_64-2008p ...
- Springboot + Rabbitmq + WebSocet + vue
1.pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- C# 监听值的变化
1.写一个监听值变化的类 public class MonitorValueChange { private Visibility myValue; public Visibility MyValue ...
- Jmeter系列(46)- Jmeter 中有哪些常用的函数
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 Jmeter 提供了很多函数 但 ...
- JavaScript学习系列博客_11_JavaScript中的for语句
for循环 - 语法: for(①初始化表达式 ; ②条件表达式 ; ④更新表达式){ ③语句... } - 执行流程: 首先执行①初始化表达式,初始化一个变量,(这里只会执行一次) 然后对②条件表达 ...
- 痞子衡嵌入式:解锁i.MXRTxxx上FlexSPI模块自带的地址重映射(Remap)功能
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT三位数系列隐藏的FlexSPI Remap功能. 前段时间痞子衡写了一篇文章 <利用i.MXRT1060,1010上新 ...