python +ip2region 离线IP库地址文件实现秒级查询ip归属地址

ip2region
ip2region - 离线的ip地址查询库,ip到地区的映射库,提供二进制,B树,内存搜索三种查询算法,查询速度非常快。
支持Java,PHP,C,Python,Nodejs,Golang,C#等语言,本文以Python为例

一、前期准备

  1. 在GitHub上克隆下来源文件
    https://github.com/lionsoul2014/ip2region
    在这里插入图片描述
    下载完的文件:
    在这里插入图片描述

  2. 解压后很轻易就分辨出来各个文件夹的作用(挨个文件夹点了一遍☹)

    注:

    1. 脚本涉及到了Python、Java、PHP、C、Nodejs、Golang、C#等多种语言
    2. 数据库文件会不定期更新,详情请参考1中的下载地址
      在这里插入图片描述

二、简单使用(以Python为例)

  1. 单个查询(直接使用大佬的脚本工具进行查询)

    python binding/python/testSearcher.py ./data/ip2region.db #python 脚本文件 数据库文件
    

    在这里插入图片描述

    注意运行时的脚本文件路径数据库文件路径

  2. 批量查询

    由于需求不同(本人需要的是批量查询),所以在大佬的脚本工具基础上进行符合本人需求的扩展

    首先把ip2region-master\data\ip2region.dbip2region-master\binding\python\ip2Region.py复制出来,并创建一个自己的py文件ipaddr_query.py
    在这里插入图片描述
    ip2region.db:数据库文件
    ip2Region.py:调用数据库的脚本工具

ipaddr_query.py里的代码如下:

from ip2Region import Ip2Region #此处导入的是刚才复制的py文件
db_file = './data/ip2region.db'  #数据库文件路径
search_file = './search_file.txt' #查询文件:每行一个ip
result_file = './result_file.txt' #结果文件:每行一个ip结果
def ip_search():
    #打开需要查询的文件
    with open(search_file,'r',encoding='utf-8') as search_file_r:
        search_file_lines = search_file_r.readlines()

    #打开结果文件,准备写入
    with open(result_file,'a',encoding='utf-8') as result_file_w:
        searcher = Ip2Region(db_file) #实例化
        for line in search_file_lines:
            ip = line.strip('\n')
            #判断是不是ip,isip这个函数是Ip2Region里写好的,直接用
            if searcher.isip(ip):
                #三种算法任选其一
                data = searcher.btreeSearch(ip) #B树
                # data = searcher.binarySearch(line) #二进制
                # data = searcher.memorySearch(line) #内存
                result_file_w.write("%s|%s\n" % (ip, data["region"].decode('utf-8')))
                print("%s|%s" % (ip, data["region"].decode('utf-8')))
            else:
                result_file_w.write('%s|错误数据\n'%ip)
                print('%s|错误数据'%ip)
    searcher.close() #关闭

if __name__ == "__main__":
    ip_search()

GitHub地址:https://github.com/lionsoul2014/ip2region
再次感谢大佬的分享,如有其它问题欢迎留言私信

posted @ 2019-07-31 23:03  程序猿杂记  阅读(512)  评论(0)    收藏  举报