Python多线程检测代理IP可用性实例

 更新时间:2026年04月27日 09:51:28   作者:LeoForBest  
本文提供了一个使用Python多线程检测代理IP可用性的示例代码,使用了requests库实现,文中强调了代码的实用性,并鼓励读者参考和使用该脚本

Python多线程检测代理IP可用性

测试样本

# ip.txt
110.52.235.87:9999@HTTP#[高匿]湖南省岳阳市 联通  
111.43.70.58:51547@HTTP#[未知]黑龙江省 移动(全省通用) 
183.196.97.125:41397@HTTP#[未知]河北省廊坊市 移动  
110.52.235.210:9999@HTTP#[高匿]湖南省岳阳市 联通  
183.166.167.163:8080@HTTP#[未知]安徽省黄山市 电信  
111.177.171.242:9999@HTTP#[未知]湖北省随州市 电信  
123.127.93.188:44399@HTTP#
....
....

python脚本

需要安装requests

pip install requests
# coding=utf-8
#

import os
import re
import requests
import threading
from datetime import datetime
from requests import RequestException
from time import sleep


BASE_DIR = os.path.dirname(__file__)
IP_TXT = os.path.join(BASE_DIR, datetime.now().strftime('%Y-%m-%d') + '-ip.txt')
SCR_IP_TXT = os.path.join(BASE_DIR, 'ip.txt')

MAX_TEST_THREADS = 100


class TestThread(threading.Thread):
    def __init__(self, _ip_li):
        self.li = _ip_li
        super(TestThread, self).__init__()

    def run(self):
        self.li = [_ for _ in self.li if self.test_ip_available(_)]

    def test_ip_available(self, ip):
        _proxy = {'https': ip}
        try:
            print u'正在检测IP: %s 有效性\n' % ip
            r = requests.get('https://www.so.com/s?ie=utf-8&fr=none&src=360sou_newhome&q=123', 
                             proxies=_proxy,
                             timeout=5)
            assert u'_360搜索' in r.text
        except (RequestException, AssertionError):
            return False
        print u'找到可用代理IP: %s\n' % ip
        return True


def time_wrapper(func):
    def _wrapper():
        start_time = datetime.now()
        func()
        end_time = datetime.now()
        seconds = (end_time - start_time).total_seconds()
        print u'本次执行共消耗: %d分%d秒\n' % (seconds / 60, seconds % 60)
    return _wrapper


@time_wrapper
def parse_ip():
    # 读取本地ip文件
    with open(SCR_IP_TXT) as f:
        _ip_list = re.findall(r'\d+\.\d+\.\d+\.\d+:\d+', f.read())
    print u'检索到: %d 个IP地址\n' % len(_ip_list)

    # 平均分配_ip_list到各个线程检测
    threads = []
    avg = len(_ip_list) / MAX_TEST_THREADS
    if len(_ip_list) % MAX_TEST_THREADS != 0:
        avg += 1
    for i in range(MAX_TEST_THREADS):
        _thread = TestThread(_ip_list[i*avg:(i+1)*avg])
        threads.append(_thread)
        _thread.start()

    # 等待所有检测线程退出
    while threading.active_count() > 1:
        sleep(10)

    # 读取所有有效IP并写入文件
    _ip_list = []
    for th in threads:
        _ip_list.extend(th.li)

    _ip_list = set(_ip_list)
    print u'\n总共找到 %d 个可用IP\n' % len(_ip_list)
    with open(IP_TXT, 'w') as f:
        f.write('\n'.join(_ip_list))


if __name__ == '__main__':
    parse_ip()

结果

检索到: 1899 个IP地址

......
......
......

正在检测IP: 124.81.245.148:8080 有效性

正在检测IP: 111.177.160.17:9999 有效性


总共找到 60 个可用IP

本次执行共消耗: 2分13秒

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现对文件进行单词划分并去重排序操作示例

    Python实现对文件进行单词划分并去重排序操作示例

    这篇文章主要介绍了Python实现对文件进行单词划分并去重排序操作,涉及Python文件读取、字符串遍历、拆分、排序等相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Numpy 多维数据数组的实现

    Numpy 多维数据数组的实现

    这篇文章主要介绍了Numpy 多维数据数组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 关于Torch torchvision Python版本对应关系说明

    关于Torch torchvision Python版本对应关系说明

    这篇文章主要介绍了关于Torch torchvision Python版本对应关系说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python中取整的几种方法小结

    Python中取整的几种方法小结

    这篇文章主要介绍了Python中取整的几种方法,其中包括向下取整、四舍五入取整、向上取整以及分别取整数部分和小数部分。分别都给出了示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,需要的朋友可以参考借鉴。
    2017-01-01
  • 上帝为你开了一扇窗之Tkinter常用函数详解

    上帝为你开了一扇窗之Tkinter常用函数详解

    构思了很长一段时间,总感觉不够有趣,于是打算出一个完整的系列,让大家一起感受python的乐趣.这个系列着重以系统库中的tkinter为中心来围绕进行编写.因此我们的第一步是导入模块, 第一节就来为大家建立一个窗口 ,需要的朋友可以参考下
    2021-06-06
  • Django重设Admin密码过程解析

    Django重设Admin密码过程解析

    这篇文章主要介绍了Django重设Admin密码过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python中typing模块与类型注解的使用方法

    Python中typing模块与类型注解的使用方法

    这篇文章主要给大家介绍了关于Python中typing模块与类型注解的使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Django中get()与filter()的区别及常见错误

    Django中get()与filter()的区别及常见错误

    Django中get()和filter()是数据查询的核心方法,本文就来介绍一下Django中get()与filter()的区别及常见错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • Python NumPy实现数组搜索示例详解

    Python NumPy实现数组搜索示例详解

    NumPy是一个开源的Python科学计算库,使用NumPy可以很自然地使用数组和矩阵,这篇文章主要介绍了使用NumPy实现数组搜索,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习吧
    2023-05-05
  • keras实现基于孪生网络的图片相似度计算方式

    keras实现基于孪生网络的图片相似度计算方式

    这篇文章主要介绍了keras实现基于孪生网络的图片相似度计算方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论