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))

原文地址:https://www.cnblogs.com/tkg1314/p/12601875.html

时间: 2024-10-08 05:51:29

Python_01_IP代理池_实现代理池的校验模块的相关文章

代理模式_静态代理

一.代理模式_静态代理 来到北京.首先第一件事就是租房子.然而北京租房子80%的都要通过中介,中介获得房屋出租的权限,出租房屋给房客.我们以这个很现实很亲近我们生活的例子来认识代理模式中的静态代理. 二.代理模式中的角色划分 2.1抽象角色:把真实角色和代理角色所共有的行为抽成一个接口或者抽象类. 2.2真实角色:被代理角色所代理的角色. 2.3代理角色:代理真实角色做某些工作. 三.静态代理示例 3.1抽象角色(把真实角色房东和代理角色中介所共有的行为出租房屋抽象成一个接口) package

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

目的:检测代理ip的可用性,保证代理池中代理ip基本可用 思路: 1.在proxy_test.py中,创建ProxyTester类 2.提供一个run方法,用于处理检测代理ip的核心逻辑 1)从数据库中获取所有代理ip 2)遍历代理ip列表 3)检查代理ip可用性 如果不可用,代理分数-1,如果代理分数=0则删除该代理,否则更新代理ip 如果可用,恢复代理ip的分数,更新到数据库中 3.为了提高检查的速度,使用异步来执行检测任务 1)把要检测的代理ip放到队列中 2)把检查一个代理可用性的代码抽

Python_01_IP代理池_实现代理池的爬虫模块的执行方法

目标:根据配置问价内心戏,加载爬虫,抓取代理ip,进行校验,如果可用写入到数据库中 思路: 1.在run_spider.py中,创建RunSpider类 2.提供一个运行爬虫的run方法,作为运行爬虫的入口,实现核心的处理逻辑 根据配置文件信息,获取爬虫对象列表 遍历爬虫对象列表,获取爬虫对象,遍历爬虫对象的get_proxies方法,获取代理ip 检测代理ip 如果可用则写入数据库 处理异常,防止一个爬虫内部出错,影响其他爬虫的使用 3.使用异步来执行每一个爬虫任务,以提高抓取代理ip的效率

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

目标:通过继承通用爬虫,实现多个具体爬虫,分别从各个免费代理ip网站上抓取代理ip 步骤 1.实现西刺代理,ip3366代理和快代理还有proxylistplus代理 定义一个类,继承通用爬虫类 提供urls,group_xpath和detail_xpath 2.实现66ip爬虫 定义一个类,继承通用爬虫类 提供urls,group_xpath和detail_xpath 由于ip66网页进行js+cookie反爬,需要重写父类的get_page_from_url()方法 代码: import t

设计模式_代理模式_动态代理

转自:https://www.ibm.com/developerworks/cn/java/j-lo-proxy-pattern/index.html 动态代理是指在运行时动态生成代理类.即,代理类的字节码将在运行时生成并载入当前代理的 ClassLoader.与静态处理类相比,动态类有诸多好处.首先,不需要为真实主题写一个形式上完全一样的封装类,假如主题接口中的方法很多,为每一个接口写一个代理方法也很麻烦.如果接口有变动,则真实主题和代理类都要修改,不利于系统维护:其次,使用一些动态代理的生成

总结代理模式 并根据数据库连接池原理来模拟实现自己的数据库连接池工具类

代理模式 需求:对系统中已有的某个类的功能,进行扩展(增强) 要求:在不修改源码的情况下,对已有的功能进行增强 静态代理 抽象接口:保证包含增强功能的对象和原有功能的对象,对外提供相同的方法 目标对象:封装了原有功能 代理对象:封装了增强功能和原有功能(通过持有一个目标对象的引用实现) 问题:代码不够灵活,产生大量冗余工作 动态代理 动态代理的实现API: Proxy : 帮助程员产生代理对象,提供产生代理类和代理对象的静态方法 InvocationHandler : 句柄接口,拦截到,所有代理

Spring之AOP原理_动态代理

面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming).声明式编程是和命令式编程(Imperative Programming)相对的概念.我们平时使用的编程语言,比如C++.Java.Ruby.Python等,都属命令式编程.命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(How to do What).声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么

Apache2.4+Tomcat集群_反向代理配置

Apache2.4+Tomcat集群_反向代理配置 测试环境:Apache反代做为前端反向代理,后端任意,此处我用做windwos,其实linux与windwos配置原理都一样,只是根据公司需求来做. 需求:        要求基于ssl访问, 301域名跳转, session sticky方式来接收请求, 有故障隔离的作用,以至于在其中一台上线时可以把用户请求转发到另一台. 1.资源下载: Apache(windows安装包)下载路径 http://www.apachelounge.com/d

.net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包

原文:.net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包 前言:  通过Fiddler抓取浏览器请求数据,相信大家已经都会用了,我们知道Fiddler是通过在本机计算器添加一个默认的代理服务器来实现的抓包数据的,端口号为:8888. 其实当我们打开Fiddler的设置也可以看到: 然后查看本地计算器的网络代理设置: 基于上面的原理,Fiddler就实现了经过本机计算器请求的数据抓包了... 那么,我们通过C#代码,在.net Core中使用HttpClient