Python批量获取IP归属地

该代码示例展示了如何使用Python的requests库查询IP地址的地理位置信息,结合pandas和openpyxl库将结果写入Excel文件。代码首先从Excel读取IP列表,然后通过一个API获取每个IP的位置信息,用tqdm创建进度条显示查询进度,并处理请求超时的异常情况。最后,所有查询结果被整理并保存到新的Excel工作表中。
摘要由CSDN通过智能技术生成

AI给出的答案

import requests
import pandas as pd
from openpyxl import Workbook, load_workbook
from time import sleep
from tqdm import tqdm

df = pd.read_excel(r"Y:\raw\2024\2024067\攻击流量大于10Gbps.xlsx")
ips = df["IP"].tolist()
data = {}
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"}

wb = Workbook()
ws = wb.active

row_num = 1
progress_bar = tqdm(total=len(ips), desc="Querying IP", unit="IP")

for i, ip in enumerate(ips):
    try:
        response = requests.get('http://ip.zxinc.org/api.php?type=json&ip=' + ip, headers=head, timeout=10)
        text = response.json()
        location = text["data"]["location"]
        d = {ip: location}
        data.update(d)

        ws.cell(row=row_num, column=1, value=ip)
        ws.cell(row=row_num, column=2, value=location)
        row_num += 1

        progress_bar.update(1)

        if (i + 1) % 200 == 0:  # 查询200个IP后休息5分钟
            progress_bar.set_description("Resting")
            progress_bar.refresh()
            sleep(60)  # 休息5分钟

    except requests.exceptions.Timeout:
        print(f"Timeout occurred while querying IP: {ip}. Retrying...")
        sleep(5)  # 等待一段时间后重新尝试
        i -= 1  # 重新查询当前IP

progress_bar.close()

wb.save('ips.xlsx')

自己写出的代码:

import requests
import pandas as pd
from openpyxl import Workbook,load_workbook

df = pd.read_excel(r"C:\Users\Administrator\Desktop\ip.xlsx")
ips = df["login_ip"].tolist()
data = {}
head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}

for ip in ips :
    response = requests.get('http://ip.zxinc.org/api.php?type=json&ip='+ip , headers = head)
    text = response.json()
    location = text["data"]["location"]
    d = {ip:location}
    data.update(d)

wb = Workbook()
ws = wb.active

row_num = 1
for ip,location in data.items() :
    ws.cell(row = row_num,column = 1, value = ip)
    ws.cell(row=row_num, column = 2, value=location)
    row_num += 1
wb.save('ips.xlsx')

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值