Python3 从HTTP代理网站批量获取代理并筛选

转载:http://blog.csdn.net/u014595019/article/details/50166385

最近在写爬虫,苦于不采用代理的情况下,默认的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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值