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代理池_实现代理池的爬虫模块的及具体爬虫