現在、urllib2 を使用して python2.7 で単純なクローラーを作成しています。これがダウンローダークラスです。
class Downloader:
def __init__(self, limit = 3):
self.limit = limit
def downloadGet(self, url):
request = urllib2.Request(url)
retry = 0
succ = False
page = None
while retry < self.limit:
print "Retry: " + str(retry) + " Limit:" + str(self.limit)
try:
response = urllib2.urlopen(request)
page = response.read()
succ = True
break
except:
retry += 1
return succ, page
すべての URL が 3 回試行されます。マルチスレッドも使用されており、スレッドコードは次のとおりです。
class DownloadThread(Thread):
def __init__(self, requestGet, limit):
Thread.__init__(self)
self.requestGet = requestGet
self.downloader = Downloader(limit)
def run(self):
while True:
url = self.requestGet()
if url == None:
break
ret = self.download(url)
print ret
def download(self, url):
# some other staff
succ, flv = self.downloader.downloadGet(url)
return succ
ただし、スレッド数を 5 に設定した実験では、ダウンローダーは 3 回試行しても停止しません。一部のスレッドでは、出力に "Retry: 4280 Limit:3" も表示されます。while 条件が無視されているようです。
どんな助けや提案も大歓迎です。ありがとうございました!