如何在Python中快速从IP地址列表中查找纬度/经度?
我目前有一列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" }
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来查找位置。