Pergunta

Tenho uma lista razoavelmente longa de sites que quero baixar as páginas Landing (index.html ou equivalente). Atualmente, estou usando o SCRAPY (muito amor para os caras por trás disso - esta é uma estrutura fabulosa). A navegação é mais lenta nessa tarefa específica do que eu gostaria e estou me perguntando se o WGET ou uma outra alternativa seria mais rápida, dado o quão direto é a tarefa. Alguma ideia?

(Aqui está o que estou fazendo com o SCRAPY. Qualquer coisa que eu possa fazer para otimizar o Scrapy para esta tarefa?)

Então, eu tenho uma lista de URLs de partida como

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

E raspo o texto de cada resposta e o guardo em um XML. Preciso desligar o offsemiddleware para permitir vários domínios.

O scrapy funciona como esperado, mas parece lento (cerca de 1000 em uma hora ou 1 a cada 4 segundos). Existe uma maneira de acelerar isso aumentando o número de concorrentes_requests_per_spider enquanto executa uma única aranha? Algo mais?

Foi útil?

Solução

Se você quiser uma maneira de baixar simultaneamente vários sites com o Python, você pode fazê -lo com as bibliotecas padrão como esta:

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()

Você também pode conferir httplib2 ou PycURL Para fazer o download para você em vez de urllib.

Não estou claro exatamente como você deseja que o texto raspado seja XML, mas você pode usar xml.etree.ElementTree da biblioteca padrão ou você pode instalar BeautifulSoup (o que seria melhor, pois lida com a marcação malformada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top