私は、時間の経過とともにクロールが遅くなるpythonプログラムを持っています。徹底的にテストし、画像をダウンロードする方法に絞り込みました。メソッドは cstringIO と urllib を使用します。問題は、urllib を使用したある種の無限ダウンロード (数百回のダウンロード後にプログラムがフリーズするだけ) である可能性もあります。
問題がどこにあるのかについて何か考えはありますか?
foundImages = []
images = soup.find_all('img')
print('downloading Images')
for imageTag in images:
gc.collect()
url = None
try:
#load image into a file to determine size and width
url = imageTag.attrs['src']
imgFile = StringIO(urllib.urlopen(url).read())
im = Image.open(imgFile)
width, height = im.size
#if width and height are both above a threshold, it is a valid image
#so add to recipe images
if width > self.minOptimalWidth and height > self.minOptimaHeight:
image = MIImage({})
image.originalUrl = url.encode('ascii', 'ignore')
image.width = width
image.height = height
foundImages.append(image)
imgFile = None
im = None
except Exception:
print('failed image download url: ' + url)
traceback.print_exc()
continue
#set the main image to be the first in the array
if len(foundImages) > 0:
first = foundImages[0]
recipe.imageUrl = first.originalUrl
return foundImages