Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例


Posted in Python onSeptember 26, 2017

本文实例讲述了Python3.4实现从HTTP代理网站批量获取代理并筛选的方法。分享给大家供大家参考,具体如下:

最近在写爬虫,苦于不采用代理的情况下,默认的IP不出几分钟就被封了,故而只能寻找代理。原以为找到HTTP代理就万事大吉了,没想到从那个网站获取的代理大部分都是不能用的,只有少部分能用。。。故而无奈之下,只能从那些代理网站大量获取代理IP,然后再拿过来进行进一步的筛选,将有效的代理IP提取出来,留待进一步使用。

筛选的主要原理是,通过main函数提取到未经筛选的代理rawProxyList,然后通过这些代理尝试连接目标网站(此文中是连接手机新浪网)。如果在规定时间内连接成功,则认定为有效代理,放到checkedProxyList之中。

__author__ = 'multiangle'
__edition__='python3.4'
import threading
import urllib.request as request
import time
rawProxyList=[]
checkedProxyList=[]
class proxycheck(threading.Thread):
 def __init__(self,proxy_list):
  threading.Thread.__init__(self)
  self.proxy_list=proxy_list
  self.timeout=3
  self.testurl='http://www.sina.cn/'
  self.testStr='手机新浪网'
 def checkproxy(self):
  cookies=request.HTTPCookieProcessor()
  for proxy in self.proxy_list:
   handler=request.ProxyHandler({'http':'http://%s'%(proxy)})
   opener=request.build_opener(cookies,handler)
   t1=time.time()
   try:
    req=opener.open(self.testurl,timeout=self.timeout)
    res=req.read()
    res=str(res,encoding='utf8')
    usetime=time.time()-t1
    if self.testStr in res:
     checkedProxyList.append((proxy,usetime))
   except Exception as e :
    print(e)
 def run(self):
  self.checkproxy()
if __name__=='__main__':
 num=20
 thread_num=10
 checkThrends=[]
 url='YOUR PROXY URL' #提取代理的网站。
 req=request.urlopen(url).read()
 req=str(req,encoding='utf-8')
 list=req.split('\r\n') #网站返回的是字符串格式,用'\r\n'进行分割
 rawProxyList=list
 print('get raw proxy')
 for i in rawProxyList:
  print(i)
 # s=proxycheck_test(rawProxyList)
 batch_size=int((len(rawProxyList)+thread_num-1)/thread_num)
 print(batch_size)
 for i in range(thread_num):
  t=proxycheck(rawProxyList[batch_size*i:batch_size*(i+1)])
  checkThrends.append(t)
 for i in range(checkThrends.__len__()):
  checkThrends[i].start()
 for i in range(checkThrends.__len__()):
  checkThrends[i].join()
 print(checkedProxyList.__len__(),' useful proxy is find')
 for i in checkedProxyList:
  print(i)

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

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

Python 相关文章推荐
Python和php通信乱码问题解决方法
Apr 15 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
Python实现简单多线程任务队列
Feb 27 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
python使用RNN实现文本分类
May 24 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python爬取微信公众号文章的方法
Feb 26 Python
python中的句柄操作的方法示例
Jun 20 Python
Django框架表单操作实例分析
Nov 04 Python
jupyter 导入csv文件方式
Apr 21 Python
python使用glob检索文件的操作
May 20 Python
python九九乘法表的实例
Sep 26 #Python
Python实现简单的HttpServer服务器示例
Sep 25 #Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 #Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 #Python
Python实现破解猜数游戏算法示例
Sep 25 #Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 #Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 #Python
You might like
Smarty Foreach 使用说明
2010/03/23 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php截取视频指定帧为图片
2016/05/16 PHP
php英文单词统计器
2016/06/23 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
javascript下过滤数组重复值的代码
2007/09/10 Javascript
JavaScript DOM 添加事件
2009/02/14 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
js获取内联样式的方法
2015/01/27 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
python实现泊松图像融合
2018/07/26 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
政治思想表现评语
2014/05/04 职场文书
关于教师节的广播稿
2014/09/10 职场文书
委托书英文
2015/01/28 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
gateway网关接口请求的校验方式
2021/07/15 Java/Android
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS