2010-03-02 10 views
9

el plan es el siguiente:descargas simultáneas - Python

puedo descargar una página web, se recoge una lista de las imágenes analizadas en el DOM y luego descargar estos. Después de esto, iteraría a través de las imágenes para evaluar qué imagen es la más adecuada para representar la página web.

El problema es que las imágenes se descargan 1 por 1 y esto puede llevar bastante tiempo.


Sería genial si alguien pudiera señalarme en alguna dirección con respecto al tema.

Ayuda sería muy apreciada.

Respuesta

4

Here es un artículo sobre enhebrado que utiliza la recuperación de URL como ejemplo.

6

Si bien enhebrado es ciertamente una posibilidad, yo sugeriría lugar asyncore - hay un excelente ejemplo here que muestra exactamente el ir a buscar simultánea de dos direcciones URL (fácil generalizar a cualquier lista de direcciones URL!).

14

Acelerar el rastreo es básicamente el caso de uso principal de Eventlet. Es muy rápido: tenemos una aplicación que debe alcanzar 2,000,000 de URL en pocos minutos. Hace uso de la interfaz de evento más rápida en su sistema (epoll, en general), y utiliza los hilos verdes (que se construyen sobre corutinas y son muy económicos) para que sea más fácil escribir.

Aquí es an example from the docs:

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) 

Este es un muy buen punto de partida para el desarrollo de un rastreador más con todas las funciones. No dude en ingresar a #eventlet en Freenode para pedir ayuda.

[actualización: He añadido un recursive web crawler example más complejo a los documentos. Juro que estaba en proceso antes de que se hiciera esta pregunta, pero la pregunta finalmente me inspiró para terminarla. :)]

+0

el segundo enlace ya no funciona. –

0

Hoy en día hay excelentes librerías de Python es posible que desee utilizar - urllib3 y requests

Cuestiones relacionadas