python爬取地图数据_高德3地图之python爬取POI数据及其边界经纬度(根据关键字在城市范围内搜索)...

本文介绍了如何使用Python爬取高德地图上的POI(Point of Interest)数据,包括关键字搜索、城市范围筛选、数据解析等步骤。通过高德地图API获取POI的ID,然后根据ID获取边界经纬度。最终,数据被导出到Excel文件中。请注意,每个API key每天的请求量有限,并且应避免频繁请求。
摘要由CSDN通过智能技术生成

目前高德的边界没法批量爬取,不过可以采用百度地图的接口来替代,目前用着还可以,参见这里:

为了方便大家,不用再为安装环境,以及运行报错等问题困扰,目前已经将POI数据爬取做成一个在线公开的数工具,地址奉上:

免费使用哦,只需要申请个高德key,然后选择需要爬取的城市,关键字名,以及数据的

背景

由于之前项目需要从高德地图上爬取一个地方的不同分类数据,所以初学了一下爬虫,也了解了一些高德地图提供的web API用来获取免费的地图数据。因此写了一篇博客用来记录一下大致步骤。

项目的需求是爬取一个地方的七个分类数据, 包括大学、景点、酒店等等,其中一条数据叫作一个POI。需要的poi点的字段包括:poi点id、名称name、位置(经纬度)location、所属省名称pname、所属省编号pcode、所属城市名称cityname、所属城市编号citycode、所属区名称adname、所属区编号adcode、所在地址address、所属类别type、边界经纬度。这里先展示一下最后爬取到的保存在excel表格中的数据吧。

657d599a64a229a947de29b483d4598c.png

步骤说明

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格式化后截图如下:

a82b0557f5053523032716e064b46bad.png

其中的pois展开后就是返回的当前页的POI数据。

3. 根据获取到的POI数据的id获取其边界经纬度

高德地图上搜索一个景点时,如果有边界的景点会圈出其范围,如下图所示:

85cb27ac550b7156b754cb5836d9887e.png

打开F12切换到network查看,点击一下该范围,会看到发送了一个detail请求,返回了这个圈的详细信息。请求的地址如下:

https://ditu.amap.com/detail/get/detail?id=B0014014AD

该接口传入POI点的id,返回详细信息,我们在第二部拿到了POI点的ID,因此可以遍历每一个POI数据,然后根据id获取边界数据,获取到的detail数据格式化后如下:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取POI数据及其边界经纬度,需要以下步骤: 1. 确定需要搜索关键字城市名称。 2. 使用Java的HTTP请求库,例如Apache HttpClient或OkHttp,向高德地图API发送搜索请求。搜索请求的URL应该包含关键字城市名称参数。 3. 解析API返回的JSON格式数据。您可以使用任何JSON解析库,例如Jackson或Gson。 4. 对解析的数据进行处理以获取POI数据和其边界经纬度。您可以将其存储在数据库或文件中,或直接在应用程序中使用。 以下是示例代码片段,展示如何使用OkHttp和Gson库搜索位于特定城市范围内的POI数据: ```java OkHttpClient client = new OkHttpClient(); String city = "北京市"; String keyword = "餐厅"; String url = "https://restapi.amap.com/v3/place/text?key=<your_key>&keywords=" + keyword + "&city=" + city + "&citylimit=true&output=json"; Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); String jsonData = response.body().string(); Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(jsonData, JsonObject.class); JsonArray pois = jsonObject.getAsJsonObject("pois").getAsJsonArray(); for (JsonElement poi : pois) { JsonObject poiObject = poi.getAsJsonObject(); String name = poiObject.get("name").getAsString(); JsonObject location = poiObject.getAsJsonObject("location"); double lat = location.get("lat").getAsDouble(); double lng = location.get("lng").getAsDouble(); JsonObject bound = poiObject.getAsJsonObject("bound"); JsonObject southwest = bound.getAsJsonObject("southwest"); double swLat = southwest.get("lat").getAsDouble(); double swLng = southwest.get("lng").getAsDouble(); JsonObject northeast = bound.getAsJsonObject("northeast"); double neLat = northeast.get("lat").getAsDouble(); double neLng = northeast.get("lng").getAsDouble(); // 处理POI数据边界经纬度 } ``` 请注意,您需要在高德地图网站上注册并获得API密钥,才能使用此代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值