Python_01_IP代理池_实现代理池的校验模块

Posted 宋泊然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_01_IP代理池_实现代理池的校验模块相关的知识,希望对你有一定的参考价值。

    目标:检验代理ip速度,匿名程度以及支持的协议类型

    步骤:

      1.检查代理ip速度和匿名程度:

        a.代理IP速度就是从发送请求到获取相应的时间间隔

        b.匿名程度检查

          对http://httpbin.org/get或https://httpbin.org/get发送请求如果相应的origin中有‘.‘分割的两个ip就是透明代理ip,如果相应的headers包含proxy-connection说明是匿名代理ip,否则就是高匿代理ip

        c.检查代理ip的协议类型

          如果http://httpbin.org/get发送成功则支持http协议,如果https://httpbin.org/get发送成功则支持https协议

      代码:

import time
import requests
from utils.http import get_request_headers
from settings import TIME_OUT
import json
from utils.log import logger
from domain import Proxy
def check_proxy(proxy):
    ‘‘‘

    用于检查指定代理ip响应速度,匿名程度,支持协议类型
    :param proxy: 代理ip模型对象
    :return: 检查后的代理ip对象
    ‘‘‘

    # 准备代理ip字典
    proxies={
        http:http://{}:{}.format(proxy.ip,proxy.port),
        http:https://{}:{}.format(proxy.ip,proxy.port)
    }

    # 测试该代理ip
    http,http_nick_type,http_speed=__check_http_proxies(proxies)
    https,https_nick_type, https_speed = __check_http_proxies(proxies,False)
    if http and https:
        proxy.protocol=2
        proxy.nick_type=https_nick_type
        proxy.nick_type=https_speed
    elif http:
        proxy.protocol=0
        proxy.nick_type=http_nick_type
        proxy.speed=http_speed
    elif https:
        proxy.protocol=1
        proxy.nick_type=https_nick_type
        proxy.speed=https_speed
    else:
        proxy.protocol=-1
        proxy.nick_type=-1
        proxy.speed=-1

def __check_http_proxies(proxies,is_http=True):
    # 匿名类型 高匿:0,匿名:1,透明:2
    nick_type=-1
    # 响应速度 单位s
    speed=-1
    if is_http:
        test_url =http://httpbin.org/get
    else:
        test_url =https://httpbin.org/get
    try:
        # 获取开始时间
        start=time.time()
        # 发送请求,获取相应数据
        response=requests.get(test_url,headers=get_request_headers(),proxies=proxies,timeout=TIME_OUT)

        if response.ok:
            # 计算相应速度
            speed=round(time.time()-start,2)
            # 匿名程度
            #获取来源ip:origin并把相应的json字符串转换为字典
            dic = json.loads(response.text)
            origin=dic[origin]
            # 获取headers
            proxy_connection=dic[headers].get(Proxy_Connection,None)
            if , in origin:
                # 如果相应的origin中有,分割的两个ip就是透明ip
                nick_type=2
            elif proxy_connection:
                # 如果相应的headers中包含Proxy_Connection说明是匿名代理ip
                nick_type=1
            else:
                nick_type=0
                # 如果都不是为高匿ip

            return True ,nick_type,speed
        return False,nick_type,speed
    except Exception as ex:
        logger.exception(ex)
        return False,nick_type,speed
if __name__ == __main__:
    proxy = Proxy(61.135.217.7, port=80)
    print(check_proxy(proxy))

 

以上是关于Python_01_IP代理池_实现代理池的校验模块的主要内容,如果未能解决你的问题,请参考以下文章

Python_01_IP代理池_实现代理池的检测模块

Python_01_IP代理池_实现代理池的爬虫模块的及具体爬虫

爬虫入门第6课:实现代理池的校验模块

静态Web服务器-返回固定页面数据Python解释器详解实现代理池的API模块

Python - 定时动态获取IP代理池,存放在文件中

python学习 —— 建立IP代理池