2012-02-18 25 views
0

私は、特定のウェブサイトから利用可能なプロキシのリストを取得し、次にそれを確認して作業プロキシを見つけるスクリプトを作成しました(インターネットリソースの助けを借りて)。一度それはそれがビルドし、そのプロキシからオープナーを見つけました。ここに私のコードです。プロキシを使って作業する

import urllib2 
import urllib 
import cookielib 
import socket 
import time 

def getOpener(pip=None): 
    if pip: 
     proxy_handler = urllib2.ProxyHandler({'http': pip}) 
     opener = urllib2.build_opener(proxy_handler) 
    else: 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 
    opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1')] 
    urllib2.install_opener(opener) 
    return opener 

def getContent(opnr, url): 
    req = urllib2.Request(url) 
    sock = opnr.open(req) 
    return sock.read() 

def is_bad_proxy(pip): 
    try: 
     opnr = getOpener(pip) 
     data = getContent(opnr, 'http://www.google.com') 
    except urllib2.HTTPError, e: 
     return e.code 
    except Exception, detail: 
     return True 
    return False 

def getProxiesList(): 
    proxies = [] 
    opnr = getOpener() 
    content = getContent(opnr, 'http://somesite.com/') 
    urls = re.findall("<a href='([^']+)'[^>]*>.*?HTTP Proxies.*?</a>", content) 
    for eachURL in urls: 
     content = getContent(opnr, eachURL) 
     proxies.extend(re.findall('\d{,3}\.\d{,3}\.\d{,3}\.\d{,3}:\d+', content)) 
    return proxies 

def getWorkingProxy(proxyList, i=-1): 
    for j in range(i+1, len(proxyList)): 
     currentProxy = proxyList[j] 
     if not is_bad_proxy(currentProxy): 
      log("%s is working" % (currentProxy)) 
      return currentProxy, j 
     else: 
      log("Bad Proxy %s" % (currentProxy)) 
    return None, -1 

if __name__ == "__main__": 
    socket.setdefaulttimeout(60) 
    proxyList = getProxiesList() 
    proxy, index = getWorkingProxy(proxyList) 
    if proxy: 
     _web = getOpener(proxy) 

そして、ある程度プロキシを1つ利用すると、このプロセスを何度も繰り返す必要があります。問題はdoes building an opener again and again will cause issues??です。次のエラーHTTPError: HTTP Error 503: Too many open connectionsが発生しているためです。エラーの原因を教えてください。前もって感謝します。

+0

あなたのリストに同じプロキシが複数回含まれている可能性があります。 – cha0site

+0

私はチェックし、proxyListに重複が含まれている可能性があります。 –

答えて

0

私はチェックし、proxyListには重複が含まれています。多くのopenersがエラーを引き起こした同じプロキシを使用しようとしていましたHTTPError: HTTP Error 503: Too many open connections

関連する問題