Pregunta

Tengo una razonablemente larga lista de sitios web que quiero descargar el páginas de destino (index.html o equivalente) para. Actualmente estoy usando Scrapy (mucho amor a los chicos detrás de él - esto es un marco fabuloso). Scrapy es más lento en esta tarea en particular de lo que me gusta y me pregunto si wget o un otra alternativa sería más rápido teniendo en cuenta lo sencillo es la tarea. ¿Algunas ideas?

(Esto es lo que estoy haciendo con Scrapy. Cualquier cosa que pueda hacer para optimizar el scrapy para esta tarea?)

Por lo tanto, tengo una lista de URL de inicio como

start_urls = [google.com                 yahoo.com                 aol.com]

Y raspar el texto de cada respuesta y almacenar esto en un xml. Tengo que dar vuelta de la offsitemiddleware para permitir múltiples dominios.

funciona Scrapy como se esperaba, pero parece lento (Acerca de 1000 en una hora o 1 cada 4 segundos). ¿Hay una manera de acelerar este proceso mediante el aumento de la número de CONCURRENT_REQUESTS_PER_SPIDER mientras se ejecuta una sola ¿araña? ¿Algo más?

¿Fue útil?

Solución

Si desea una forma de descargar simultáneamente múltiples sitios con Python, puede hacerlo con las bibliotecas estándar como esto:

import threading
import urllib

maxthreads = 4

sites = ['google.com', 'yahoo.com', ] # etc.

class Download(threading.Thread):
   def run (self):
       global sites
       while sites:
           site = sites.pop()
           print "start", site
           urllib.urlretrieve('http://' + site, site)
           print "end  ", site

for x in xrange(min(maxthreads, len(sites))):
    Download().start()

También podría revisar httplib2 o PycURL hacer la descarga para usted en lugar de urllib.

No me queda claro exactamente cómo desea que el texto raspado como XML a la mirada, pero se puede usar xml.etree.ElementTree de la librería estándar o se puede instalar BeautifulSoup (que sería mejor, ya que se encarga de marcado malformado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top