我目前正在使用 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 次后不会停止。对于某些线程,输出甚至显示“重试:4280 限制:3”。似乎忽略了while条件。
任何帮助和建议都受到热烈欢迎。谢谢!