通过python获取您的位置

Sta*_*low 20 python geolocation

无论如何,我可以通过python获取我的设备的位置.目前我不得不使用selenium并打开浏览器,使用位置服务网站并将其结果设置为lat/long变量.

但有更简单的方法吗?

更新:我在我的RaspberryPi上使用3G加密狗,所以寻找一种方法来获得特定的lat/long - 我可以通过Web服务成功地做到这一点,只是想知道这些请求是否有更快的方法内置到python中?

小智 28

假设:

正在寻找位置的设备是运行Python的设备您可以访问Internet(由于您提到了位置服务网站,因此看起来很公平)

在这种情况下,存在与评论中链接的服务类似的服务,其中请求的IP用于生成位置.例如,http://freegeoip.net/.

import requests
import json

send_url = 'http://freegeoip.net/json'
r = requests.get(send_url)
j = json.loads(r.text)
lat = j['latitude']
lon = j['longitude']
Run Code Online (Sandbox Code Playgroud)

缺点

仅使用IP来生成位置.

更新:此API端点被弃用,并且将停止在7月1日,2018年工作欲了解更多信息,请访问: https://github.com/apilayer/freegeoip#readme "


小智 26

或者,就像这一样简单

import geocoder
g = geocoder.ip('me')
print(g.latlng)
Run Code Online (Sandbox Code Playgroud)

  • 这曾经是一种简单的方法!那谢谢啦。 (2认同)

Ben*_*ing 11

其他人提到了一些服务,但是要考虑的另一个服务是我自己的服务https://ipinfo.io,它将为您提供纬度,经度和许多其他信息:

Bash的用法:

$ curl ipinfo.io
{
  "ip": "24.6.61.239",
  "hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3845,-122.0881",
  "org": "AS7922 Comcast Cable Communications, LLC",
  "postal": "94040"
}
Run Code Online (Sandbox Code Playgroud)

如果只需要坐标数据,可以通过请求获得/loc

$ curl ipinfo.io/loc
37.3845,-122.0881
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见https://ipinfo.io/developers


Aas*_*ish 7

由于http://freegeoip.net/jsonAPI 端点已被弃用并将于 2018 年 7 月 1 日停止工作。因此,他们发布了新的 API http://api.ipstack.com

因此,您可以使用新的 API 来尝试一下:

import requests
import json

send_url = "http://api.ipstack.com/check?access_key=YOUR_ACCESS_KEY"
geo_req = requests.get(send_url)
geo_json = json.loads(geo_req.text)
latitude = geo_json['latitude']
longitude = geo_json['longitude']
city = geo_json['city']
Run Code Online (Sandbox Code Playgroud)

为了获得您自己的ACCESS_KEY,您必须首先在https://ipstack.com/signup/freeipstack.com创建一个免费帐户。

随着latitude,longitudecity; 您还可以获取zip、、、、、、、。continent_codecontinent_namecountry_codecountry_nameregion_coderegion_name

限制:免费帐户每月仅允许您 10,000 个请求。如果您的要求更多,那么您可以升级您的帐户。

有关此新 API 的更多信息,您可以访问https://github.com/apilayer/freegeoip

参考:@JishnuM 答案


小智 2

这是一个具有 GeoFreeIP 的 Python 地理编码模块

示例: http: //geocoder.readthedocs.io/

$ pip install geocoder
Run Code Online (Sandbox Code Playgroud)

使用 CLI

$ geocode '99.240.181.199' --provider freegeoip --pretty --json
Run Code Online (Sandbox Code Playgroud)

使用Python

>>> import geocoder
>>> g = geocoder.freegeoip('99.240.181.199')
<[OK] Freegeoip - Geocode [Ottawa, Ontario Canada]>
>>> g.json
Run Code Online (Sandbox Code Playgroud)