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 参数列表中的self 显式不等于冗余
Dec 01 Python
python实现从字典中删除元素的方法
May 04 Python
pymongo实现多结果进行多列排序的方法
May 16 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
如何实现删除numpy.array中的行或列
May 08 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
Python GUI编程完整示例
Apr 04 Python
python实现机器人卡牌
Oct 06 Python
python实现的人脸识别打卡系统
May 08 Python
python爬取豆瓣电影TOP250数据
May 23 Python
Python绘制地图神器folium的新人入门指南
May 23 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
十天学会php之第八天
2006/10/09 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
详解Python中的array数组模块相关使用
2016/07/05 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python字典的值可以修改吗
2020/06/29 Python
python zip()函数的使用示例
2020/09/23 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
init进程的作用
2012/04/12 面试题
介绍一下Mysql的存储引擎
2015/02/12 面试题
广告学专业推荐信范文
2013/11/23 职场文书
技术总监管理职责范本
2014/03/06 职场文书
经典毕业生求职信
2014/07/12 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
基于Redis位图实现用户签到功能
2021/05/08 Redis
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers