Я хочу реализовать функцию, подобную этой http://www.tineye.com/parse?url=yahoo.com - разрешить пользователю загружать изображения с любой веб-страницы.
Основная проблема для меня заключается в том, что веб-страницам с большим количеством изображений требуется слишком много времени.
Я делаю это в Django (используя curl или urllib) по следующей схеме:
Захватить html страницы (для больших страниц требуется около 1 секунды):
file = urllib.urlopen(requested_url)
html_string = file.read()
Синтаксический анализ HTML-парсера (BeautifulSoup), поиск тегов img и запись всех изображений в список. (для больших страниц занимает около 1 секунды)
Проверьте размеры всех изображений в моем списке и, если они достаточно велики, верните их в ответ json (занимает очень много времени около 15 секунд, когда на веб-странице около 80 изображений). Вот код функции:
def get_image_size(uri):
file = urllib.urlopen(uri)
p = ImageFile.Parser()
data = file.read(1024)
if not data:
return None
p.feed(data)
if p.image:
return p.image.size
file.close()
#not an image
return None
Как видите, я не загружаю полное изображение, чтобы получить его размер, только 1 КБ. Но это все еще занимает слишком много времени, когда есть много изображений (я вызываю эту функцию один раз для каждого найденного изображения).
Так как я могу заставить его работать быстрее?
Может быть, есть ли способ не делать запрос на каждое изображение?
Любая помощь будет высоко оценена.
Спасибо!