[Python3.4] 从HTTP代理网站批量获取代理并筛选

来源:互联网 发布:网络销售需要什么条件 编辑:程序博客网 时间:2024/05/16 10:31

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

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

__author__ = 'multiangle'__edition__='python3.4'import threadingimport urllib.request as requestimport timerawProxyList=[]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)
0 0
原创粉丝点击