python代理池的构建2——代理ip是否可用的处理和检查
上一篇博客地址: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代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
三、关于代码一些问题解决链接:
python中schedule模块的简单使用 || importlib.import_module动态导入模块
Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义
python代理池的构建2——代理ip是否可用的处理和检查的更多相关文章
- python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...
- python代理池的构建5——对mongodb数据库里面代理ip检查
上一篇博客地址:python代理池的构建4--mongdb数据库的增删改查 一.对数据库里面代理ip检查(proxy_test.py) #-*-coding:utf-8-*- ''' 目的:检查代理I ...
- python代理池的构建3——爬取代理ip
上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...
- python代理池的构建4——mongdb数据库的增删改查
上一篇博客地址:python代理池的构建3--爬取代理ip 一.mongdb数据库的增删改查(Mongo_pool.py) #-*-coding:utf-8-*- ''' 实现代理池的数据库模块 ●作 ...
- python爬虫redis-ip代理池搭建几十万的ip数据--可以使用
from bs4 import BeautifulSoupimport requests,os,sys,time,random,redisfrom lxml import etreeconn = re ...
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- Python爬虫代理池
爬虫代理IP池 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速稳定的运行,当然在公司做的东西不能开源出来 ...
- Python实现的异步代理爬虫及代理池
使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理.同时用aiohttp实 ...
- 介绍一种 Python 更方便的爬虫代理池实现方案
现在搞爬虫,代理是不可或缺的资源 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那 ...
随机推荐
- kubernets之机理概览
一 了解kubernets的运行机理 1.1 了解架构 众所周知,kubernets的组成由2个部分组成 kubernets 平面 node节点 (工作节点) 控制平面的组成 etcd 分布 ...
- 使用bapi创建PO遇到问题(BAPI_PO_CREATE1
今天用 BAPI_PO_CREATE1创建po. 注意事项: vendor 供应商号:长度必须和系统一致,10位.如 2000025要写成 0002000025传递给参数. POITEM 中的 PO_ ...
- layui表格前端格式化时间戳字段
layui.use(['util','table'], function(){ var table = layui.table; var util = layui.util; //... ...
- 入门OJ:售货员的难题
题目描述 某乡有n个村庄(1<n<15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同.为了提高效率 ...
- kaggle新手如何在平台学习大神的代码
原创:数据臭皮匠 [导读]Kaggle ,作为听说它很牛X但从未接触过的同学,可能仅仅了解这是一个参加数据挖掘比赛的网站,殊不知Kaggle也会有赛题相关的数据集, 比如我们熟知的房价预测.泰坦尼克 ...
- Arduino 上手实战呼吸灯
前言 这篇稿子比以往的时候来的稍晚了一些,望fans们见谅,那即便如此,最终还是姗姗来迟了,公司新一轮战略性部署,被拖出去孵化新产品,开拓新市场去了,手头精力没有那么多了,另外产品一茬接一茬.韭菜一波 ...
- 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。
package org.apache.hadoop.examples; import java.util.HashMap; import java.io.IOException; import jav ...
- URL 重定向机制
由于存在上述三种 URL 重定向机制,那么在多种方法同时设定的情况下,哪种方法会首先起作用呢?优先级顺序如下: HTTP 协议的重定向机制永远最先触发,即便是在没有传送任何页面--也就没有页面被(客户 ...
- CS229 Lecture 01
CS229 Lecture notes 01 机器学习课程主要分为4部分:监督学习:学习理论:无监督学习:增强学习. $x^{(i)}$表示特征,$y^{(i)}$表示目标,$i=1...m$.m是训 ...
- python模块----optparse模块、argparse模块 (命令行解析模块)
简介 optparse module---自版本3.2以来已弃用:optparse模块已弃用,将不再进一步开发:将继续使用argparse模块进行开发.optparse使用一种更具声明性的命令行解析方 ...