• 【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]))计算。

  • 相关阅读:
    Tensorflow的对二次函数的神经网络训练
    ubuntu16.04的Anaconda下的tensorflow安装py3.5
    数字信号处理C语言(3) ------FFT
    数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数
    数字信号处理C语言(1) ------均匀分布和高斯分布随机数
    CCIE学习笔记 ----TSHOOT
    CCIE学习笔记 ----BGP
    CCIE学习笔记 ----GRE over IPsec
    调试
    Java protobuf框架使用向导
  • 原文地址:https://www.cnblogs.com/break03/p/11569572.html
Copyright © 2020-2023  润新知