比起普通的静态网页爬虫,爬高德地图的麻烦之处在于API中存在参数。这需要我们首先要对高德地图API有个基本的了解。

登录高德地图API网站,点击“开发文档”,找到下图中的“地理/逆地理编码API”处,点击进入。

1856c1283e7926c6d0957ab9f77b71ce.png

我们可以看到一个API,其问号前面的部分是固定不变的,而问号后面的是参数部分。高德地图此处罗列了7个参数,包括2个必选参数,以及5个可选参数。这两个必选参数,一个是高德key,需要注册;另一个是参数address,比如人民公园。你也许需要的是南京的人民公园的经纬度信息,凑巧的是,北京也有一个人民公园。参数city的存在可以限定地址信息的范围,确保你获取的是南京的人民公园经纬度。参数output值得关注,默认的输出结果是json格式。

c9882b723e132f960d884f0e99c27b63.png

7da1d28201d00d20d07b4d18460489c1.png

如果我需要的不是某个建筑的经纬度,而是某个行政区域的呢?打个比方,我不想要南京的人民公园的经纬度,我想要的是南京市的经纬度。这样也是可以实现的,只需要参数address直接填入“南京市”即可,这便不需要参数city了。这样得出的经纬度,一般是各地行政中心所在的经纬度。

下面,我将爬取南京市的经纬度。

import requests
import json
url = 'https://restapi.amap.com/v3/geocode/geo'   # 输入API问号前固定不变的部分
params = { 'key': '你的高德密钥',
           'address': '南京市'   }                # 将两个参数放入字典
res = requests.get(url, params)
res.text

输出结果如下:

0d5ffd945827bb3418b6a4758e73bd91.png

输出结果是json格式,需要用到json模块将其转化为Python字典。

jd = json.loads(res.text)
jd

输出结果如下:

f94f3adb9c191eadb7b1978494c77e76.png
coords = jd['geocodes'][0]['location']
coords

输出结果如下:

8c7a066130ce0872ed35cea28105e7c1.png

这,便是南京市坐标。

为了方便起见,将上面过程整合为函数。

import requests
import json
def coords(city):
    url = 'https://restapi.amap.com/v3/geocode/geo'   # 输入API问号前固定不变的部分
    params = { 'key': '你的高德密钥',                 
               'address': city   }                    # 将两个参数放入字典
    res = requests.get(url, params)
    jd =  json.loads(res.text)
    return jd['geocodes'][0]['location']

下面,在自变量位置输入“南京市”,检验下函数正确性。

当大批量处理时,使用for循环即可。

d904e0e04745fe35c9329fdfd32477b1.png
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐