目前高德的边界没法批量爬取,不过可以采用百度地图的接口来替代,目前用着还可以,参见这里:
为了方便大家,不用再为安装环境,以及运行报错等问题困扰,目前已经将POI数据爬取做成一个在线公开的数工具,地址奉上:
免费使用哦,只需要申请个高德key,然后选择需要爬取的城市,关键字名,以及数据的
背景
由于之前项目需要从高德地图上爬取一个地方的不同分类数据,所以初学了一下爬虫,也了解了一些高德地图提供的web API用来获取免费的地图数据。因此写了一篇博客用来记录一下大致步骤。
项目的需求是爬取一个地方的七个分类数据, 包括大学、景点、酒店等等,其中一条数据叫作一个POI。需要的poi点的字段包括:poi点id、名称name、位置(经纬度)location、所属省名称pname、所属省编号pcode、所属城市名称cityname、所属城市编号citycode、所属区名称adname、所属区编号adcode、所在地址address、所属类别type、边界经纬度。这里先展示一下最后爬取到的保存在excel表格中的数据吧。
步骤说明
1. 申请账号
到高德开放平台 | 高德地图API注册账号,并且申请web服务的AK密钥,每次发送请求需要带着这个key去认证。注册账号登陆后点击右上角的控制台 ->应用管理 -> 创建应用 -> 添加新key,注意选择web api,就得到了一个可以使用web服务的key密钥。
2. 确定api查询的地址:
查找高德地图提供的web api下的搜索模块,http://lbs.amap.com/api/webservice/guide/api/search 使用关键字搜索服务,关键字搜索API的服务地址:
http://restapi.amap.com/v3/place/text?parameters
我们需要根据API提供的参数说明拼接GET请求所需要的参数URL。常用的使用参数说明:
key
用户在高德地图官网申请Web服务API类型KEY
keywords
查询关键字
types
查询POI类型
city
城市
offset,page
分页参数
output
返回数据格式类型,可选值:JSON,XML
比如,查询珠海的所有大学数据,拼接起来完整的url:
http://restapi.amap.com/v3/place/text?&keywords=%E5%A4%A7%E5%AD%A6&city=%E7%8F%A0%E6%B5%B7&output=json&offset=20&page=1&key=9f99fc570ccaf6abc209780433d9f4c1&extensions=all
使用浏览器打开上面的链接,返回的数据使用hijson格式化后截图如下:
其中的pois展开后就是返回的当前页的POI数据。
3. 根据获取到的POI数据的id获取其边界经纬度
高德地图上搜索一个景点时,如果有边界的景点会圈出其范围,如下图所示:
打开F12切换到network查看,点击一下该范围,会看到发送了一个detail请求,返回了这个圈的详细信息。请求的地址如下:
https://ditu.amap.com/detail/get/detail?id=B0014014AD
该接口传入POI点的id,返回详细信息,我们在第二部拿到了POI点的ID,因此可以遍历每一个POI数据,然后根据id获取边界数据,获取到的detail数据格式化后如下: