Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中快速从IP地址列表中查找纬度/经度?_Python_Api_Get_Ip Address - Fatal编程技术网

如何在Python中快速从IP地址列表中查找纬度/经度?

如何在Python中快速从IP地址列表中查找纬度/经度?,python,api,get,ip-address,Python,Api,Get,Ip Address,我目前有一列IP地址,我想用相应的纬度/经度列来表示 我目前正在使用以下方法,但速度非常慢: def getting_ip(row,latlong): url = r'https://freegeoip.app/json/'+row headers = { 'accept': "application/json", 'content-type': "application/json" }

我目前有一列IP地址,我想用相应的纬度/经度列来表示

我目前正在使用以下方法,但速度非常慢:

def getting_ip(row,latlong):
    url = r'https://freegeoip.app/json/'+row
    headers = {
        'accept': "application/json",
        'content-type': "application/json"
        }
    response = requests.request("GET", url, headers=headers)
    respond = json.loads(response.text)
    if respond[latlong]:
      return respond[latlong]
    else:
      return None

df['Latitude'] = [getting_ip(i,'latitude') if i else None for i in df['IP']]
df['Longitude'] = [getting_ip(i,'longitude') if i else None for i in df['IP']]

在定义中使用.apply也不会节省我很多时间,我大部分时间都花在收回请求上。是否有一种免费、简单的方法可以从ip地址获取纬度/经度(几次请求后不会过期?)。

为此,如果您喜欢python,我发现以下软件包:

ip2geotools 它可以从IP地址提取纬度和经度

ip2geotools是一个简单的工具,用于从各种地理位置数据库获取给定IP地址的地理位置信息。这个包为几个地理定位数据库提供了一个API

一个例子如下:

>response=DbIpCity.get('147.229.2.90',api_key='free')
>>>response.ip_地址
'147.229.2.90'
>>>回应.城市
“布尔诺(布尔诺圣řed)”
>>>响应区域
“南摩拉维亚”
>>>答复:国家
“CZ”
>>>响应纬度
49.1926824
>>>响应经度
16.6182105
>>>对_json()的响应
{“ip地址”:“147.229.2.90”,“城市”:“布尔诺(布尔诺圣德)”,“地区”:“南摩拉维亚”,“国家”:“CZ”,“纬度”:49.1926824,“经度”:16.6182105}
>>>对_xml()的响应
“147.229.2.90Brno(Brno střed)南摩拉维亚49.192682416.6182105”
>>>对"csv"(",")的答复
'147.229.2.90,布尔诺(布尔诺圣德),南摩拉维亚,捷克,49.1926824,16.6182105'
Geoip2 另一个包也可用,它与此包类似,但具有异步请求处理支持和单独的数据库搜索选项

如果需要的话,您可以查看他们的网站上的同步和异步web服务示例

IP2定位
由于这个API大部分是付费的,我试图找到一个免费版本,我发现这个库名为,它在一个月内为您提供30000次免费查找。

您可以使用IP2Location Python库获得IP地址的纬度和经度。比如说,

import os
import IP2Location

database = IP2Location.IP2Location(os.path.join("data", "IP2LOCATION-LITE-DB5.BIN"))

rec = database.get_all("19.5.10.1")

print(rec.country_short)
print(rec.country_long)
print(rec.region)
print(rec.city)
print(rec.latitude)
print(rec.longitude)

上面使用的示例代码。您可以在此处注册并免费获取数据库:。

我指的是类似类型的数据库。我想这会帮你解决这个问题。谢谢,但ip2geotools在免费计划下只允许在设定的时间内发出少量请求,而geoip2只允许在付费计划下进行异步调用,但是如果没有免费的计划来满足我的需求,这两个都会很好。哦,我试着搜索更多有免费计划的软件包,并将其添加到列表中。但是现在你可以使用本文来构建一个。它使用一个免费的api来查找位置。