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 流程控制实例代码
Sep 25 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
常见python正则用法的简单实例
Jun 21 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
python实现移位加密和解密
Mar 22 Python
python3实现微型的web服务器
Sep 03 Python
python分布式编程实现过程解析
Nov 08 Python
解决python replace函数替换无效问题
Jan 18 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 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
php5 图片验证码实现代码
2009/12/11 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
Yii框架登录流程分析
2014/12/03 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
php数组遍历类与用法示例
2019/05/24 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
在vue项目中使用sass语法问题
2019/07/18 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
员工保密协议书
2014/09/27 职场文书
入学证明
2015/06/23 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android