Python3实现并发检验代理池地址的方法


Posted in Python onSeptember 18, 2016

本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下:

#encoding=utf-8
#author: walker
#date: 2016-04-14
#summary: 用协程/线程池并发检验代理有效性
import os, sys, time
import requests
from concurrent import futures
cur_dir_fullpath = os.path.dirname(os.path.abspath(__file__))
Headers = {
      'Accept': '*/*',
      'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)',
    }
#检验单个代理的有效性
#如果有效,返回该proxy;否则,返回空字符串
def Check(desturl, proxy, feature):
  proxies = {'http': 'http://' + proxy}
  r = None #声明
  exMsg = None
  try:
    r = requests.get(url=desturl, headers=Headers, proxies=proxies, timeout=3)
  except:
    exMsg = '* ' + traceback.format_exc()
    #print(exMsg)
  finally:
    if 'r' in locals() and r:
      r.close()
  if exMsg:
    return ''
  if r.status_code != 200:
    return ''
  if r.text.find(feature) < 0:
    return ''
  return proxy
#输入代理列表(set/list),返回有效代理列表
def GetValidProxyPool(rawProxyPool, desturl, feature):
  validProxyList = list()  #有效代理列表
  pool = futures.ThreadPoolExecutor(8)
  futureList = list()
  for proxy in rawProxyPool:
    futureList.append(pool.submit(Check, desturl, proxy, feature))
  print('\n submit done, waiting for responses\n')
  for future in futures.as_completed(futureList):
    proxy = future.result()
    print('proxy:' + proxy)
    if proxy: #有效代理
      validProxyList.append(proxy)
  print('validProxyList size:' + str(len(validProxyList)))
  return validProxyList
#获取原始代理池
def GetRawProxyPool():
  rawProxyPool = set()
  #通过某种方式获取原始代理池......
  return rawProxyPool
if __name__ == "__main__":
  rawProxyPool = GetRawProxyPool()
  desturl = 'http://...'    #需要通过代理访问的目标地址
  feature = 'xxx'    #目标网页的特征码
  validProxyPool = GetValidProxyPool(rawProxyPool, desturl, feature)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python和pyqt实现360的CLable控件
Feb 21 Python
github配置使用指南
Nov 18 Python
Python切片操作实例分析
Mar 16 Python
python筛选出两个文件中重复行的方法
May 31 Python
python人民币小写转大写辅助工具
Jun 20 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
python实现简单登陆系统
Oct 18 Python
python3中rank函数的用法
Nov 27 Python
python程序文件扩展名知识点详解
Feb 27 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
实战Python爬虫爬取酷我音乐
Apr 11 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 #Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 #Python
Python基于pillow判断图片完整性的方法
Sep 18 #Python
Django返回json数据用法示例
Sep 18 #Python
Python中list初始化方法示例
Sep 18 #Python
Python提取网页中超链接的方法
Sep 18 #Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 #Python
You might like
php Ubb代码编辑器函数代码
2012/07/05 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
python 8种必备的gui库
2020/08/27 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
银行存款证明样本
2014/01/17 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
同学聚会祝酒词
2015/08/10 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
六年级作文之自救
2019/12/19 职场文书
python实现过滤敏感词
2021/05/08 Python
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js