python批量跑IP地址归属地的排坑之路

                                   利用Python跑IP地址归属地


目录

                                                                           利用Python跑IP地址归属地

1.前言

2.获取IP库接口

3.分析接口返回数据格式

4.排坑之路

5.具体代码


1.前言

作为一个老新手,在工作中需要使用跑IP地址信息,于是就想用python写一个脚本。虽然代码还是不够看,但是在过程中遇到很多坑希望记录下来以后能及时避免。

2.获取IP库接口

因为需要的信息相对较详细,所以需要一个免费的、高效的、准确的IP地址信息库。网上一抹多但是实用的就只有那么几个,关键是有一些打着免费试用的幌子按个数卖钱的,真的太恶心了。会让你觉得你成功了,其实呢只是中途停下来让你加钱。

这里推荐良心商家马爸爸开的淘宝,真的是为数不多良心商家,提供免费地、好用地、准确的IP地址信息库,讲道理这波推荐我是认真地。唯一需要注意的是有一个accessKey参数在官网是不会提供的,我开始以为是需要购买的,在我心灰意冷后打算给马爸爸充钱的时候竟然发现这个key网上有。

连接如下:

http://ip.taobao.com/outGetIpInfo?ip=%s&accessKey=alibaba-inc

3.分析接口返回数据格式

详见下图,图 1是该网站提供的接口信息,有一点不准确,但是对最后的结果没有影响,根据图 2返回的信息使用脚本进行处理和存储。

方式是通过code字段判断或者msg字段的值判断是否查询成功,在将获取data字段的值提取保存下来。

图 1
图 1
图 2

 

4.排坑之路

要批量处理IP地址,就需要将被处理的IP保存到一个txt文件里,并且也需要将结果给保存到一个文件里。在python中处理文件的方法有很多,这里就不赘述,但其中有几个坑需要在这里记录一下。

以下代码是我处理接口返回数据的函数,其中需要注意的是结果的返回,由于对python还未掌握精髓,我一开始在return使用的是print直接打印。在这里需要注意,如果你这么设计你的函数,那么在输出结果的时候会在下一行返回一个None,如果有想了解原因的朋友请点击【Python进阶篇】python之函数的返回值

# 处理IP地址库接口返回的数据
def get_ip_info(ip):
    url = 'http://ip.taobao.com/outGetIpInfo?ip=%s&accessKey=alibaba-inc' % ip
    header = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"}
    result = requests.get(url,headers = header)
    if result.json()['code'] == 0:
        DetailedAddress = result.json()['data']
        country = DetailedAddress['country']
        privince = DetailedAddress['region']
        city = DetailedAddress['city']
        ipadd = DetailedAddress['ip']
        ipIsp = DetailedAddress['isp']
        return '该%s所在归属地国家:%s 省份: %s 城市:%s 运营商:%s' % (ipadd,country,privince,city,ipIsp)

    else:
         print('该%s地址无法查询到信息' % ip)

这是本人处理文件的函数,不知道有没有和我有一样的习惯,就是在找寻文件绝对路径的时候习惯右击,点击属性,然后在安全里复制文件的绝对路径,这样的话那你的代码应该会报一个错,报错内容如下,解决办法就是删除该路径重新敲一遍。其实搜索\u202A,要比搜索整段报信息结果要好得多,错具体原理请点击Python3之由通用字符名称“\u202A”

OSError: [Errno 22] Invalid argument: '\u202aC:\\Users\\wangping01\\Desktop\\ipaddress.txt'

# 读取要查询的IP地址和将结果保存到指定的位置
def main():
    for url in fileinput.input(r"D:\Microsoft VS Code\pythonProject\Day1-15\ip.txt"):
        url = url.replace("\n", "") # 替换末尾的换行符
        ipinfo = get_ip_info(url)
        with open(r"C:\Users\administrator\Desktop\ipaddress.txt",'a',encoding='utf-8') as f:
            f.write(ipinfo+"\n")
            f.close 
        # print(get_ip_info(url))

5.具体代码

贴出代码就一个目的,希望有大佬和同仁们瞅见能指点一二,因为要跑的IP量太大,代码完全不够用。期待指导交流!

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import requests
import fileinput

# 处理IP地址库接口返回的数据
def get_ip_info(ip):
    url = 'http://ip.taobao.com/outGetIpInfo?ip=%s&accessKey=alibaba-inc' % ip
    result = requests.get(url,headers = header)
    if result.json()['code'] == 0:
        DetailedAddress = result.json()['data']
        country = DetailedAddress['country']
        privince = DetailedAddress['region']
        city = DetailedAddress['city']
        ipadd = DetailedAddress['ip']
        ipIsp = DetailedAddress['isp']
        return '该%s所在归属地国家:%s 省份: %s 城市:%s 运营商:%s' % (ipadd,country,privince,city,ipIsp)

    else:
         print('该%s地址无法查询到信息' % ip)
# 读取要查询的IP地址和将结果保存到指定的位置
def main():
    for url in fileinput.input(r"D:\Microsoft VS Code\pythonProject\Day1-15\ip.txt"):
        url = url.replace("\n", "") # 替换末尾的换行符
        ipinfo = get_ip_info(url)
        with open(r"C:\Users\administrator\Desktop\ipaddress.txt",'a',encoding='utf-8') as f:
            f.write(ipinfo+"\n")
            f.close 
        # print(get_ip_info(url))


if __name__ == '__main__':
    main()
        

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值