【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0

1、工具说明

写报告的时候为了细致性,要把IP地址对应的地区给整理出来。500多条IP地址找出对应地区复制粘贴到报告里整了一个上午。
为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本。

某个项目每次改需求都是这么突然。 应 XX 每天要求各种省份域名统计,再加强下Domain to IP to 地区的脚本。

Domain2ip2locality.py v2.0 写入到XLS中
Domain2ip2locality.py v3.0 增加域名解析IP、IP解析地区的部分

2、使用方法

把IP写到.txt文件中就可以了,输出到D:\0utCode_ip_domain\目录内的IP.xls内。代码注释中已经说明!

#-*-coding:utf-8-*-

import sys
import os
import requests
from bs4 import BeautifulSoup
import tablib
import socket
import re

# Domain2ip2locality.py v3.0
# 作者:zzzhhh
# 2017-9-30
# 提取站长之家IP批量查询的结果加强版本-写入到XLS中
# 增加域名解析IP、IP解析地区的部分

## 默认存放路径D:\\0utCode_ip_domain\\ip.xls
path = "D:\\0utCode_ip_domain\\"    # 存放路径
filename = "ip"                       # 文件名称
dataset1 = tablib.Dataset()           # 数据集合

ip_list = []                          # IP列表

# 写XLS
def into_els(old_ip,new_ip,taglocality):
    headers = ('域名','ip', '地区')        # 首行字段
    dataset1.headers = headers
    dataset1.append((old_ip,new_ip,taglocality))


# 判断是否是IP
def DetermineIPorDomain(unknow):
    # IP判断的正则
    reip = r'\d+\.\d+\.\d+\.\d+'
    ip = re.findall(reip, unknow)
    if len(ip)>0:
        return ip
    else:
        ip = www_ip(unknow)
        return ip

# 域名转换IP
def www_ip(name):
    try:
        result = socket.getaddrinfo(name,None)
        return result[0][4][0]
    except:
        return 0

#匹配出IP地址函数
def matchIP (new_ip,old_ip):
    url = "http://ip.chinaz.com/"
    try:
        url = url+str(new_ip)
    except:
        print url

    ## 根据传入的IP地址截取出地区
    wbdata = requests.get(url).text
    soup = BeautifulSoup(wbdata, 'lxml')
    for tag in soup.find_all('span', class_='Whwtdhalf w50-0'):
        tag_extractl = tag.get_text().encode('utf-8')
        if tag_extractl.find("IP的物理位置"):     #过滤掉【IP的物理位置】这个字符
            print "%s||%s||%s" % (old_ip,new_ip,tag.get_text())         #输出域名,IP,地区
            into_els(old_ip,new_ip,tag.get_text())                        #写数据到数据集合中


#读取文件函数
def read_file(file_path):
    # 判断文件路径是否存在,如果不存在直接退出,否则读取文件内容
    if not os.path.exists(file_path):
        print 'Please confirm correct filepath !'
        sys.exit(0)
    else:
        with open(file_path, 'r') as source:
            for line in source:
                ip_list.append(line.rstrip('\r\n').rstrip('\n'))

    # 遍历IP,通过站长之家查询IP对应地区
    for ip in ip_list:
        to_ip = DetermineIPorDomain(ip)   # 转换
        matchIP(to_ip,ip)

    # 写文件到Excel
    hFile = open(path + filename + '.xls', "wb")
    hFile.write(dataset1.xls)
    hFile.close()


if __name__ == '__main__':
    file_str=raw_input('Input file ip.txt filepath eg:D:\\\\test.txt \n')
    #file_str = "D:\\WebUrl.txt"
    read_file(file_str)    #读取文件

3、 代码效果

用Excel自定义排序就可以可以排序某个特定省份了。。。



===========================================================

一个独立安全研究员,自由职业者的知识星球《公鸡队之家》,一边研究技术,一边分享到星球,一边养活自己,我们都有一颗好为人师的心,赠人玫瑰,手留余香。星球的价格是199¥/年。希望大家赏光,加入二维码在文末。

知识星球
posted @   17bdw  阅读(2019)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示