我背着女朋友,用 Python 偷偷抓取了她的行踪
生活随笔
收集整理的這篇文章主要介紹了
我背着女朋友,用 Python 偷偷抓取了她的行踪
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
全世界只有3.14 %?的人關注了青少年數學之旅
pip3?install?exifread
然后,進入高德開放平臺,申請一個 Web 服務的應用,獲取到一個 「Key」用于逆地理編碼 API。
使用?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
轉載來源:AirPython部分素材源于網絡,版權歸原作者所有如有侵權請留言聯系刪除,感謝合作
1
目 標 場 景
2
準 備 工 作
pip3?install?exifread
然后,進入高德開放平臺,申請一個 Web 服務的應用,獲取到一個 「Key」用于逆地理編碼 API。
3
編? 寫? 腳? 本
使用?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
結 果 結 論
轉載來源:AirPython部分素材源于網絡,版權歸原作者所有如有侵權請留言聯系刪除,感謝合作
寫在最后
總結
以上是生活随笔為你收集整理的我背着女朋友,用 Python 偷偷抓取了她的行踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 砸4亿美元,GE豪赌的全球最大风力发电机
- 下一篇: 如何用Python进行数据探索,探索竞赛