1

目 标 场 景

有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我。但是,你又很想知道女朋友的「位置」,这该如何是好?

其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信发原图给你,拿到「微信原图」后,你就可以利用 Python 快速获取到女友的具体位置了。

2

准 备 工 作

首先,在虚拟环境中安装识别图片元数据的库。

pip3 install exifread

然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。

3

编  写  脚  本

整个操作分为 3 步骤,分别是获取图片的经度和纬度、对经度和纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。

第 1 步,获取图片的「经度和纬度」。

使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度、纬度、南北纬方向、东西经方向和拍摄时间。

# 使用 exifread 获取图片的元数据
img_exif = exifread.process_file(open(self.img_path,  rb ))

# 能够读取到属性
if img_exif:
     # 纬度数
     latitude_gps = img_exif[ GPS GPSLatitude ]

# N,S 南北纬方向
     latitude_direction = img_exif[ GPS GPSLatitudeRef ]

# 经度数
     longitude_gps = img_exif[ GPS GPSLongitude ]

# E,W 东西经方向
     longitude_direction = img_exif[ GPS GPSLongitudeRef ]

# 拍摄时间
     take_time = img_exif[ EXIF DateTimeOriginal ]

如果元数据存在,然后判断拍摄时间是否合理。如果拍摄时间不在今天,那只能很遗憾地通知你,你的女朋友在向你撒谎「撒谎」。

def judge_time_met(self, take_time):
    """
    判断拍摄时间是否是在今天
    :param take_time:
    :return:
    """
    # 拍摄时间
    format_time = str(take_time).split(" ")[0].replace(":", "-")

# 当天日期
    today = str(datetime.date.today())

if format_time == today:
        return True
    else:
        return False

if is_lie:
        print( 很遗憾的通知你,你的女朋友在撒谎!!!)
        return

如果女友没有撒谎,那么可以进行第 2 步的操作。

因为通过 GPS 获取的经度、纬度和高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。

x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 扁率

def wgs84togcj02(lng, lat):
    """
    WGS84转GCJ02(火星坐标系)
    :param lng:WGS84坐标系的经度
    :param lat:WGS84坐标系的纬度
    :return:
    """
    if out_of_china(lng, lat):  # 判断是否在国内
        return lng, lat
    dlat = transformlat(lng - 105.0, lat - 35.0)
    dlng = transformlng(lng - 105.0, lat - 35.0)
    radlat = lat / 180.0 * pi
    magic = math.sin(radlat)
    magic = 1 - ee * magic * magic
    sqrtmagic = math.sqrt(magic)
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
    dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
    mglat = lat + dlat
    mglng = lng + dlng
    return [mglng, mglat]

另外需要注意的是,接口中经度、纬度参数只能识别小数点后 6 位,需要对经纬度中的度、分、秒做一定的数据处理,然后再进行四舍五入。

def __format_lati_long_data(self, data):
    """
    对经度和纬度数据做处理,保留6位小数
    :param data: 原始经度和纬度值
    :return:
    """
    # 删除左右括号和空格
    data_list_tmp = str(data).replace( [ ,  ).replace( ] ,  ).split( , )
    data_list = [data.strip() for data in data_list_tmp]

# 替换秒的值
    data_tmp = data_list[-1].split( / )

# 秒的值
    data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600

# 替换分的值
    data_tmp = data_list[-2]

# 分的值
    data_minute = int(data_tmp) / 60

# 度的值
    data_degree = int(data_list[0])

# 由于高德API只能识别到小数点后的6位
    # 需要转换为浮点数,并保留为6位小数
    result = "%.6f" % (data_degree + data_minute + data_sec)
    return float(result)

第 3 步,调用高德的反地理编码 API,传入申请的应用 Key,就能拿到女朋友的详细地址。

def __get_address(self, location):
    """
    根据坐标得到详细地址
    :param location: 经纬度值
    :return:
    """
    resp = requests.get(self.url_get_position.format(self.api_key, location))

location_data = json.loads(resp.text)

address = location_data.get( regeocode ).get( formatted_address )

return address

4

结 果 结 论

确保图片是原图的基础上,可以快速帮你判断女朋友是否在撒谎;如果女朋友没有撒谎,就返回女朋友具体的位置。

我已经将全部源码上传到后台上,点击文末『阅读原文』即可获得。

推荐阅读

“00后”开始读研了!清华今年最小博士生17岁

【Linux】15 个『牛逼』的Linux工具,提高效率的同时增加乐趣

【Python库】1.5万 Star 的热门项目:PythonFire

【Linux】13 个"牛逼"的工具,增加码代码的乐趣

【实用】Github 超过 3 万 Star 的『超实用技术面试手册』

【笔记】22 个 Linux 高频命令

喜欢就点击“在看”吧!

【实战】我背着女朋友,用 Python 偷偷抓取了她的行踪相关推荐

  1. 【文末赠书】我背着女朋友,用 Python 偷偷抓取了她的行踪

    1 目 标 场 景 有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我.但是,你又很想知道女朋友的「位置」,这该如何是好? 其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信 ...

  2. 我背着女朋友,用 Python 偷偷抓取了她的行踪

    全世界只有3.14 % 的人关注了 青少年数学之旅 1 目 标 场 景 有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我.但是,你又很想知道女朋友的「位置」,这该如何是好? 其实你可以这样套 ...

  3. Python爬虫实战,requests模块,Python实现抓取芒果TV弹幕

    前言 利用Python实现抓取芒果TV弹幕,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块: pandas模块 以及一些Python自带 ...

  4. Python爬虫实战,requests模块,Python实现抓取腾讯视频弹幕评论

    前言 利用Python实现抓取腾讯视频弹幕,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块: pandas模块 以及一些Python自带 ...

  5. Python爬虫实战,requests模块,Python实现抓取知乎热点话题

    前言 利用Python实现抓取知乎热点话题,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块: re模块: pandas模块: lxml模 ...

  6. 骚操作 !用 Python 偷偷抓取女朋友的行踪(女朋友在哪里)

    阅读文本大概需要 5 分钟. 1 目 标 场 景 有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我.但是,你又很想知道女朋友的「位置」,这该如何是好? 其实你可以这样套路女朋友,假装自己在家 ...

  7. Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤

    开发工具 Python版本: 3.6.4 相关模块: requests模块: urllib模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块 ...

  8. python爬虫实战,requests模块,Python实现抓取头条街拍美图

    前言 利用Python爬取的是今日头条中的街拍美图.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re: requests模块: 以及一些Python自带的 ...

  9. Python爬虫实战,requests模块,Python实现抓取某站美女壁纸

    前言 这一期我们会带大家进一步复现我们的魔塔小游戏,主要内容为进一步完成和其他更为复杂的地图元素接触时可以触发的事件. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本: 3.7.4 相关 ...

最新文章

  1. 畅享网助力打造IT界的文化人
  2. 用户行为变迁 行业垂直深耕——疫情下的2020年移动互联网报告
  3. English trip M1 - PC9 Where am I Teacher:Jade
  4. 47. Magneto Transaction Email(1)
  5. Linux系统下存在大量的TIME_WAIT状态的TCP连接的解决方法
  6. 深度学习笔记--激活函数:sigmoid,maxout
  7. 真无线蓝牙耳机哪个好?四款买了不亏的真无线蓝牙耳机
  8. eclipse中文版官方下载
  9. 权重计算方法三:变异系数法(Coefficient of Variation)
  10. SBIO | 浙大马忠华团队综述染色质重塑复合体SWI/SNF在植物-病原体互作中的作用...
  11. 360p2刷无线打印服务器,360P2路由器怎么修改无线信道?-360安全路由P2的WiFi信道修改教程?...
  12. CS大作业--程序人生--Hello‘s P2P
  13. 元子弹老师-吉他指弹左手技巧
  14. helm 错误 Error: INSTALLATION FAILED: must either provide a name or specify --generate-name
  15. web项目运行时无法重命名MySQL表问题排查
  16. 第21章 DHCP
  17. fastJson与String、对象、集合之间相互转换
  18. oracle事件的特点,ORACLE 深入解析10053事件(1)
  19. 麻醉学专业名词解释(比较全面)
  20. ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)

热门文章

  1. C#练习——窗体实现简单计算器,完成加,减,乘,除,取余,简单运算
  2. 2019年北邮计算机院复试上机题目
  3. mysql密码到期 1862_MySQL错误代码1862yourpasswordhasexpired的解决方法
  4. docker-harbor安装部署
  5. linux退出vi编辑器操作,Linux下怎么退出VI编辑器
  6. Vue计算属性案例-----菜单页面计算
  7. linux mysql 1055_linux mysql5.7报err 1055错误 sql_mode=only_full_group
  8. Java命名规范简介
  9. java-php-python-ssm日租房管理系统计算机毕业设计
  10. 毕业5年决定你的命运