python代理池的构建2——代理ip是否可用的处理

上一篇博客地址:python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

一、代理ip是否可用的处理

#-*-coding:utf-8-*-
#check ip
‘‘‘
目标:检查代理IP速度,匿名程度以及支持的协议类型.
步骤:
检查代理IP速度和匿名程度;

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

匿名程度检查:

对http://httpbin.org/get 或https://httpbin.org/get 发送请求

如果响应的origin 中有‘,分割的两个IP就是透明代理IP

如果响应的headers 中包含Proxy-Connection 说明是匿名代理IP,否则就是高匿代理IP检查代理IP协议类型

如果http://httpbin. org/get 发送请求可以成功,说明支持http协议
如果https://httpbin. org/get 发送请求可以成功,说明支持https协议

‘‘‘
import time
import requests
import sys
import json

sys.path.append("..")  #这一部分就是告诉你你要导入的模块在什么位置(相对于本模块地址)
sys.path.append("../..")
from utils.http import get_requests_headers
from settings import TEST_TIMEOUT
from utils.log import logger
from domain import Proxy

def check_proxy(proxy):
    proxies = {  #分别对着一个代理ip,进行http尝试和https尝试
        ‘http‘:‘http://{}:{}‘.format(proxy.ip,proxy.port),
        ‘https‘: ‘https://{}:{}‘.format(proxy.ip, proxy.port),
    }

    http,http_nick_type,http_speed = __check_http_proxies(proxies)
    https, https_nick_type, https_speed = __check_http_proxies(proxies,False)
    #0->http,1->https,2->http and https
    if http and https:   #按之前的逻辑进行判断
        proxy.protocol=2
        proxy.nick_type=http_nick_type
        proxy.speed=http_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
    return proxy

def __check_http_proxies(proxies,is_http=True):  #检查代理可用不
    nick_type=-1
    speed=-1

    if is_http:
        test_url = ‘http://httpbin.org/get‘
    else:
        test_url = ‘https://httpbin.org/get‘

    try:  #加上try,防止requests没访问到程序直接中断
        start = time.time()  #这个是记录当前时间
        response = requests.get(test_url,headers=get_requests_headers(),proxies=proxies,timeout=TEST_TIMEOUT)
        #print(response.text)
        if response.ok:
            #ip speed
            speed = round(time.time()-start)
            dic = json.loads(response.text)  #把返回信息转化成json类型,也就是字典类型
            #ip origin
            origin = dic[‘origin‘]
            proxy_connection = dic[‘headers‘].get(‘Proxy-Connection‘,None)
            #这里用get的原因是,如果获取不到内容可以赋值为None,而不会报错
            if ‘,‘ in origin:
                nick_type=2
            elif proxy_connection:
                nick_type=1
            else :
                nick_type=0
            return True,nick_type,speed
        else:
            return False,nick_type,speed
    except Exception as ex:
        #logger.exception(ex)
        return False,nick_type,speed

if __name__ == ‘__main__‘:  #程序测试
    proxy = Proxy(‘117.95.55.40‘,port=‘9999‘)
    print(check_proxy(proxy))

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12173699.html

时间: 2024-08-28 18:12:03

python代理池的构建2——代理ip是否可用的处理的相关文章

python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代理IP支持的协议类型,http是0, https是1, https和http都支持是2 nick_ type: 代理IP的匿名程度,高匿:0,匿名: 1,透明:2 speed:代理IP的响应速度,单位s area:代理IP所在地区 score:代理IP的评分,用于衡量代理的可用性;默认分值可以通过配

python代理池的构建3——爬取代理ip

上篇博客地址:python代理池的构建2——代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同URL列表,分组的XPATH和详情的XPATH,从不同页面上提取代理的IP,端口号和区域的通用爬虫; 步骤: 1.在base_ spider.py文件中,定义 一个BaseSpider类, 继承object 2.提供三个类成员变量: urls:代理IP网址的URL的列表 group_ xpath:分组X

python学习 —— 建立IP代理池

代码: from bs4 import BeautifulSoup from requests import Session, get, post from time import sleep import random import re, os class ProxyIpPool(object): def __init__(self,page): object.__init__(self) self.page = page def init_proxy_ip_pool(self): url

python asyncio异步代理池

使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理.同时用aiohttp实现了一个server,其他的程序可以通过访问相应的url来从代理池中获取代理. 源码 Github 环境 Python 3.5+ Redis PhantomJS(可选) Supervisord(可选) 因为代码中大量使用了asyncio的async和await语法,它们是在Python3.5中才提供

【Python3爬虫】Scrapy使用IP代理池和随机User-Agent

在使用爬虫的时候,有时候会看到由于目标计算机积极拒绝,无法连接...,这就是因为我们的爬虫被识别出来了,而这种反爬虫主要是通过IP识别的,针对这种反爬虫,我们可以搭建一个自己的IP代理池,然后用这些IP去访问网站. 新建一个proxies.py,实现我们自己的代理池,主要模块有获取模块.验证模块和存储模块. (1)获取模块:爬取网上的免费代理,这一部分我就写了个爬取西刺代理的代码,除了获取网上的代理,还要对代理池中代理进行清洗,因为有些代理会失效: (2)验证模块:验证我们的代理是否可用,如果不

[Golang] 一个简易代理池

晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: 1 package main 2 3 import ( 4 "os" 5 "fmt" 6 log "github.com/Sirupsen/logrus" 7 "io/ioutil" 8 "strings" 9 ) 10 11 type New struct

代理池的创建

应用场景 爬虫过于频繁的抓取网站信息会被反爬虫机制屏蔽掉,或者有些网站对我们的Ip有限制,一个IP之能操作一次,这个时候就需要设置代理了.这方面需求还是很大的,有专门的服务商提供代理,没钱的自己动手打造一个代理池吧. 所用的工具 O/RM-Entity Framework Html解析-HtmlAgilityPack  任务调度-Quartz.NET基本原理 部分网站上有免费的代理IP信息,比如xicidaili.com,proxy360.cn.这些网站有很多免费代理IP,然而有些质量不好,需要

【Python3爬虫】教你怎么利用免费代理搭建代理池

一.写在前面 有时候你的爬虫刚开始的时候可以正常运行,能够正常的爬取数据,但是过了一会,却出现了一个"403 Forbidden",或者是"您的IP访问频率太高"这样的提示,这就意味着你的IP被ban了,好一点的情况是过一段时间你就能继续爬取了,坏一点的情况就是你的IP已经进入别人的黑名单了,然后你的爬虫就GG了.怎么办呢?我们可以通过设置代理来解决,付费代理的效果自然不必多说,但是对于学习阶段的人来说,我觉得爬取网上的免费代理来用是一个更好的选择,而这一篇博客就将

python爬虫+多线程+多进程+构建IP代理池

目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip很严重,就拿静听网来说,你听一个在线音频,不能一个没听完就点击下一集,甚至不能快进太快,否则直接禁你5分钟才能再听,真的是太太讨厌了... 于是我就想用爬虫给它爬下来存储本地就nice了. 我把我的大概分析步骤分享出来. 步骤1: 我查看静听网网页url有一个规律,基网址是http://ww