【Python爬虫】第四课(查询照片拍摄地址)

首先,要能够查询到照片地址,查询的照片必须要开GPS拍,且上传时用原图……

查询图片的exif信息,使用exifread包

import exifread
img = exifread.process_file(open(path), 'rb')

longitude = img['GPS GPSLongitude']
latitude = img['GPS GPSLatitude']

这里建议,可以找一个exif查看器上传一个图片看一看,对GPS GPSLongitude等信息有一个直观印象

到这里,我花费时间最长才发现的一个坑。现象是我写完后,读取结果总是[],print(resp.text)发现经纬度根本没有读进去。type(longitude)才发现这是<class 'exifread.classes.IfdTag'>对象。这才明白,我根本没有获取到值得原因。以后的教训是:对一个未用过的工具,可以一步步看下输出的结果是什么。

longitude_gps = longitude.values
latitude_gps = latitude.values

  

下一步,我一开始也不清楚,拿到的是度分秒的经纬度,需要转化为十进制的经纬度

转换公式为 度+分/60+秒/3600,得到longitude_new, latitude_news

吸取上一步教训,longitude_gps[0],longitude_gps[1],longitude_gps[2] 分别为度,分,秒,但要用.num方法获取值

按道理,我们已经将度分秒的经纬度进行了转换,用于最后一步。

import requests
import json

url = 'https://restapi.amap.com/v3/geocode/regeo?key={}&location={}' #详见高德逆解析地理API文档
location = '{},{}'.format(longitude_new, latitude_news)
api_key = 'sdasadsadsad' #申请成为高德个人开发者。添加应用管理既可
resp = requests.get(url.format(api_key, location))

data = json.loads(resp.text)
address = data.get('regeocode').get('formatted_address')
print(address)

  

再回头看以上,还有两个问题是在实际测试中发现的。

1. 经纬度,高德提供小数点后6位, 因此要约一下,用round函数即可

2. longitude_gps[2] 在整数的时候没问题,但会遇到m/n的情况,这无法直接运算,会出现较大误差。更改为eval(str(latitude_gps[-1]))计算。

猜你喜欢

转载自www.cnblogs.com/break03/p/11569572.html