план - это:
Я загружаю веб-страницу, собираю список изображений, проанализированных в DOM, и затем загружаю их. После этого я выполнил бы итерации через изображения для оценки, какое изображение подходит лучше всего для представления веб-страницы.
Проблема состоит в том, что изображения загружаются 1 на 1, и это может занять некоторое время.
Было бы замечательно, если кто-то мог бы указать на меня в некотором направлении относительно темы.
Справка очень ценилась бы.
Здесь - статья о многопоточности, в которой в качестве примера используется выборка URL.
Ускорение сканирования - это, по сути, основной вариант использования Eventlet . Это очень быстро - у нас есть приложение, которое должно получить 2000000 URL-адресов за несколько минут. Он использует самый быстрый интерфейс событий в вашей системе (как правило, epoll) и использует greenthreads (которые построены на основе сопрограмм и стоят очень недорого), чтобы упростить запись.
Вот пример из документации :
urls = ["http://www.google.com/intl/en_ALL/images/logo.gif",
"https://wiki.secondlife.com/w/images/secondlife.jpg",
"http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"]
import eventlet
from eventlet.green import urllib2
def fetch(url):
body = urllib2.urlopen(url).read()
return url, body
pool = eventlet.GreenPool()
for url, body in pool.imap(fetch, urls):
print "got body from", url, "of length", len(body)
Это довольно хорошая отправная точка для разработки более полнофункционального краулера. Не стесняйтесь зайти в #eventlet на Freenode, чтобы попросить о помощи.
[обновление: я добавил в документы более сложный пример рекурсивного поискового робота . Клянусь, это было в разработке до того, как был задан этот вопрос, но вопрос, наконец, вдохновил меня закончить его. :)]
Хотя многопоточность, безусловно, возможна, я бы вместо этого предложил asyncore
- здесь есть отличный пример , который показывает в точности одновременную выборку двух URL-адресов (легко обобщить на любой список URL-адресов!).