zoukankan      html  css  js  c++  java
  • 【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]))计算。

  • 相关阅读:
    Java--强制转化
    Java--成绩分类
    建造者模式的应用
    抽象工厂模式的应用
    工厂模式
    第几天
    Stacking Plates(存档待续.....(没有写思路和程序))
    圆的面积
    公孙策和陆湘湘对话(少年包青天第二部第二十集末尾和第二十一集开头部分)
    简单接口回调例子
  • 原文地址:https://www.cnblogs.com/break03/p/11569572.html
Copyright © 2011-2022 走看看