如何解决Python:将 IP 地址列表传递给 geoip2 以进行位置查找
我正在寻找一种方法来分析包含位置数据的大量 IP 地址列表。此列表大约有 10000000 个条目。
目前我使用的是 maxmind 的 geoip2 模块。原始代码可以查找单个IP地址条目并打印带有国家/地区代码的结果,如下所示:
import geoip2.database
reader = geoip2.database.Reader('./GeoLite2-Country_20210330/GeoLite2-Country.mmdb')
response = reader.country('80.80.80.80')
print('response.country.iso_code: {}'.format(response.country.iso_code))
reader.close()
我试图找出一种方法来扩展这个脚本,通过遍历 csv 文件一次搜索更多条目。我写了一个无法正常工作的代码。似乎 Python 不喜欢我传递列表的方式。
import geoip2.database
from csv import reader
import csv
read_db = geoip2.database.Reader('./GeoLite2-Country_20210330/GeoLite2-Country.mmdb')
with open('SrcIP.csv','r') as file1:
csv_read = csv.reader(file1,delimiter=' ',quotechar='|')
for row in csv_read:
response = read_db.country(','.join(row))
print(response) #note 1
print('response.country: {}'.format(read_db.country)) #note 2
注意 1:如果我直接打印响应变量,它会在数据库中搜索 IP 地址范围并打印每个 IP 地址的所有可用信息。结果,每一行的输出变得太多。
注 2:此行将输出限制为仅国家/地区代码。但是,它会为每一行返回错误,如下所示:
response.country:
解决方法
我想我已经设法解决了我自己的问题。 我将代码更改为:
import geoip2.database
import csv
read_db = geoip2.database.Reader('./GeoLite2-Country_20210330/GeoLite2-Country.mmdb') #read database
with open('SrcIP.csv','r') as file1:
csv_read = csv.reader(file1,delimiter=' ',quotechar='|')
for row in csv_read:
response = read_db.country(','.join(row))
filtered_res = response.country.iso_code
print(filtered_res)
让我知道你的想法。我用给定的 IP 地址对结果进行了交叉检查,国家代码似乎是正确的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。