2010-01-25 16 views
5

Quiero cargar por lotes las páginas web en un solo sitio. Hay 5000000 enlaces de URL en mi archivo 'urls.txt'. Son alrededor de 300M. ¿Cómo hacer un enlace de múltiples hilos estas URL y descargar estas páginas web? o ¿cómo lote descargar estas páginas web?Python, varios hilos, buscar páginas web, descargar páginas web

mis ideas:

with open('urls.txt','r') as f: 
    for el in f: 
     ##fetch these urls 

o sometidas a torsión?

¿Existe una buena solución para ello?

+2

¿Quieres programar usted mismo? Puedes hacer esto con 'wget' fácilmente. – notnoop

Respuesta

1

Definitivamente la descarga de páginas web de 5M de una sola vez no es una buena idea, ya que se maximizarán un montón de cosas, incluido el ancho de banda de la red y los descriptores de archivos de su sistema operativo. Yo iría en lotes de 100-1000. Puede usar urllib.urlopen para obtener un socket y luego simplemente leer() en varios hilos. Puede usar select.select. De ser así, continúe y descargue los 1000 a la vez y distribuya cada identificador de archivo que seleccione para decir 10 hilos de trabajo. Si select no funciona, limite sus lotes a 100 descargas y use un hilo por descarga. Ciertamente, no debería iniciar más de 100 subprocesos ya que su sistema operativo podría explotar o al menos ir un poco lento.

3

Si esto no es parte de un programa más grande, entonces la idea de no usar la herramienta existente para lograr esto es bastante buena. Si un bucle de shell que invoca a wget resuelve tu problema, será mucho más fácil que cualquier cosa que implique un desarrollo de software más personalizado.

Sin embargo, si necesita recuperar estos recursos como parte de un programa más grande, entonces hacerlo con shell puede no ser ideal. En este caso, recomiendo Twisted, lo que facilitará hacer muchas solicitudes en paralelo.

Hace algunos años escribí un ejemplo de cómo hacer esto. Eche un vistazo al http://jcalderone.livejournal.com/24285.html.

+0

gracias :) ¡Es genial! – bell007

1

Primero analice su archivo e inserte las URL en una cola, luego engendre 5-10 hilos de trabajo para sacar las URL de la cola y descargarlas. Queue es tu amigo con esto.

+0

gracias! "Queue es tu amigo con esto". :) – bell007

0

Una secuencia de comandos wget es probablemente más simple, pero si usted está buscando una solución de rastreo pitón-trenzado, echa un vistazo a scrapy

Cuestiones relacionadas