01 问题描述
认识小编的老读者都知道,最早我是写Python爬虫的。平时就有很多读者问我爬虫有什么用,当时我的回答是这样的:爬虫是采集数据的一种方法,是数据分析中的一环,如果做数据分析,企业需要你具有爬虫技能(这种公司会在招聘中写到),你就得学。如果不需要的话,可以先把重点放在其他技能方面。
但有很多读者说,自己以后也不从事互联网相关的工作,这个爬虫有什么用?其实当时我也没有很好的解释,只能说提升自己总没错。在我工作后,也确实很久没有用到爬虫。但多一种技能,就少一个求人的理由,就在单位的项目中,我成功使用到了爬虫相关的内容。
大概的需求是这样的,需要根据属性表中的经纬度,得到详细的地址信息。
02 高德地图API
如果不会编程来解决,只能在地图中,一个个输入经纬度,然后将返回的地址复制到属性表中。但属性表数据很多时,这种方法就太慢了。
其实,我们只需要调用高德地图的API就可以很轻松的完成,也不过是几行代码的事情,具体步骤如下:
① 输入高德API网址,然后选择 Web服务API。
② 我们找到地理/逆地理编码(我们用到的就是逆地理编码),这就是我们需要使用的文档,之前我说过,API使用都很简单,只要认真查看其API文档即可。
③ 通过阅读文档,我们可以确定以下几点:
请求为get方式
url为 https://restapi.amap.com/v3/geocode/regeo?key={}&location={},这里的key大家申请就就好了,location就是经纬度,但是必须为十进制
返回的地址信息在'regeocode'下的'formatted_address'
④ 这样,我们就可以很轻松的把代码写出来了。
import requests
import json
def getlocation(lon,lat):
new_lon = int(lon.split(u"° ")[0]) + float(lon.split(u"° ")[1].split("' ")[0])/60 + float(lon.split(u"° ")[1].split("' ")[1].split('" ')[0])/3600
new_lat = int(lat.split(u"° ")[0]) + float(lat.split(u"° ")[1].split("' ")[0])/60 + float(lat.split(u"° ")[1].split("' ")[1].split('" ')[0])/3600
try:
url = 'http://restapi.amap.com/v3/geocode/regeo?key={}&location=' + str(new_lon) + "," + str(new_lat)
res = requests.get(url)
json_data = json.loads(res.text)
return json_data['regeocode']['formatted_address']
except:
return 'error1'
特别主要的是,我们先要将经纬度转为十进制才可以。
03 总结
所以,有时候的学习可能不是为了眼前的利益,你学的东西,总有一天会使用到的,加油!