Одновременные загрузки - Python - PullRequest
9 голосов
/ 02 марта 2010

план такой:

Я загружаю веб-страницу, собираю список изображений, проанализированных в DOM, а затем загружаю их.После этого я перебрал бы изображения, чтобы оценить, какое изображение лучше всего подходит для представления веб-страницы.

Проблема в том, что изображения загружаются 1 к 1, и это может занять довольно много времени.


Было бы замечательно, если бы кто-то мог указать мне какое-то направление в отношении темы.

Помощь будет очень признательна.

Ответы [ 4 ]

13 голосов
/ 02 марта 2010

Ускорение сканирования - это в основном Eventlet .Это очень быстро - у нас есть приложение, которое должно набрать 2 000 000 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, чтобы попросить о помощи.

[обновление: я добавил более сложный рекурсивный пример веб-сканера в документы.Я клянусь, что это было в работах до того, как был задан этот вопрос, но этот вопрос, наконец, вдохновил меня закончить его.:)]

6 голосов
/ 02 марта 2010

Хотя многопоточность, безусловно, возможна, я бы вместо этого предложил asyncore - здесь есть превосходный пример здесь , который точно показывает одновременную выборку двух URL-адресов (их легко обобщить на любой список URL!).

4 голосов
/ 02 марта 2010

Здесь - статья о многопоточности, в которой в качестве примера используется выборка URL.

0 голосов
/ 26 января 2012

В настоящее время есть отличные библиотеки Python, которые вы можете использовать - urllib3 и запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...