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

一、代理ip是否可用的处理(httpbin_validator.py)

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

用这部分代码的时候只需要给check_proxy()传一个代理ip对象参数(这个对象在上一篇我们构建过),然后它就会自动检查该代理ip可用性,最后更新这个代理ip信息然后把这个对象返回

二、python代理池的构建的其他链接

python代理池的构建5——对mongodb数据库里面代理ip检查

python代理池的构建4——mongdb数据库的增删改查

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

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

三、关于代码一些问题解决链接:

协程gevent模块和猴子补丁

python中schedule模块的简单使用 || importlib.import_module动态导入模块

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义

python代理池的构建2——代理ip是否可用的处理和检查的更多相关文章

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

    一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...

  2. python代理池的构建5——对mongodb数据库里面代理ip检查

    上一篇博客地址:python代理池的构建4--mongdb数据库的增删改查 一.对数据库里面代理ip检查(proxy_test.py) #-*-coding:utf-8-*- ''' 目的:检查代理I ...

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

    上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...

  4. python代理池的构建4——mongdb数据库的增删改查

    上一篇博客地址:python代理池的构建3--爬取代理ip 一.mongdb数据库的增删改查(Mongo_pool.py) #-*-coding:utf-8-*- ''' 实现代理池的数据库模块 ●作 ...

  5. python爬虫redis-ip代理池搭建几十万的ip数据--可以使用

    from bs4 import BeautifulSoupimport requests,os,sys,time,random,redisfrom lxml import etreeconn = re ...

  6. python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫

    用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...

  7. Python爬虫代理池

    爬虫代理IP池 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速稳定的运行,当然在公司做的东西不能开源出来 ...

  8. Python实现的异步代理爬虫及代理池

    使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理.同时用aiohttp实 ...

  9. 介绍一种 Python 更方便的爬虫代理池实现方案

    现在搞爬虫,代理是不可或缺的资源 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那 ...

随机推荐

  1. python学习笔记 | macOS Big Sur动态壁纸食用指南

    目录 前言 爬虫篇 壁纸使用篇 后记 前言 北京时间23日凌晨1点,苹果WWDC2020大会开幕.在发布会上,苹果正式发布了新版macOS,并将其命名为"Big Sur". 相比于 ...

  2. maven生命周期与插件

    目录 Maven生命周期 clean default site 命令与对应周期 插件与绑定 插件目标 插件绑定 内置绑定 自定义绑定 插件配置 本文主要是针对<maven实战>书中关键知识 ...

  3. ASP.NET Core - JWT认证实现

    一.JWT结构 JWT介绍就太多了,这里主要关注下Jwt的结构. Jwt中包含三个部分:Header(头部).Payload(负载).Signature(签名) Header:描述 JWT 的元数据的 ...

  4. Angular入门到精通系列教程(13)- 路由守卫(Route Guards)

    1. 摘要 2. 路由守卫(Route Guards) 2.1. 创建路由守卫 2.2. 控制路由是否可以激活 2.3. 控制路由是否退出(离开) 3. 总结 环境: Angular CLI: 11. ...

  5. VGA调试心得

    以前自己调试过视频信号,无非就时钟加行场同步加数据线,如果视频信号出问题,第一看现象,第二测频率,反正出问题不是消隐信号出问题,就是时钟频率出问题.通过这种方式也调试成功过几个显示屏,然后就以为自己对 ...

  6. 基于循环队列的BFS的原理及实现

    文章首发于微信公众号:几何思维 1.故事起源 有一只蚂蚁出去寻找食物,无意中进入了一个迷宫.蚂蚁只能向上.下.左.右4个方向走,迷宫中有墙和水的地方都无法通行.这时蚂蚁犯难了,怎样才能找出到食物的最短 ...

  7. Rancher On K3s 高可用架构部署

    Rancher 推荐部署架构 k3s 模式 RKE 和 k8s 模式 备注: 我对 RKE 的理解就是 Ansible + kubeadm 的打包,首先 rke 需要到每一个节点都可以免密 ssh , ...

  8. Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

    一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...

  9. Spring AOP介绍与使用

    Spring AOP介绍与使用 AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程 ​ 面向切面 ...

  10. Spring Security OAuth2.0认证授权六:前后端分离下的登录授权

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...