python

超轻量级php框架startmvc

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

更新时间:2020-05-08 08:36:01 作者:startmvc
本文实例讲述了Python3.4实现从HTTP代理网站批量获取代理并筛选的方法。分享给大家供大家

本文实例讲述了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)

Python3.4 HTTP 代理网站 批量 获取 代理 筛选