Pergunta

Quero construir um rastreador da Web com base no Scrapy para pegar fotos de várias notícias de vários sites do Portal de Notícias. Eu quero que este rastreador seja:

  1. Correr para sempre

    Significa que ele periodicamente visitará algumas páginas do portal para obter atualizações.

  2. Agendar prioridades.

    Dê prioridades diferentes para diferentes tipos de URLs.

  3. Busca multi -thread

Eu li o documento de scrapy, mas não encontrei algo relacionado ao que listei (talvez eu não tenha cuidado o suficiente). Há alguém aqui sabe como fazer isso? Ou apenas dê uma ideia/exemplo sobre isso. Obrigado!

Foi útil?

Solução

O Scrapy é uma estrutura para a arremessagem de sites, como tal, pretende apoiar seus critérios, mas não vai dançar para você fora da caixa; Você provavelmente terá que se familiarizar com o módulo para algumas tarefas.

  1. Running Forever está de acordo com o seu aplicativo que chama o SCRAPY. Você diz as aranhas para onde ir e quando ir para lá.
  2. Dar prioridades é o trabalho de Middleware do agendador que você teria que criar e conectar -se à navegação. A documentação sobre isso parece irregular e eu não olhei para o código - em princípio a função está lá.
  3. A navegação é inerentemente, fundamentalmente assíncrono O que pode muito bem ser o que você deseja: a solicitação B pode ser atendida enquanto a solicitação A ainda está pendente. O mecanismo de conexão subjacente não o impede de genuíno Multi-threading, mas a scrapy não fornece serviços de rosqueamento.

O SCRAPY é uma biblioteca, não um aplicativo. Existe uma quantidade não trivial de trabalho (código) que um usuário do módulo precisa fazer.

Outras dicas

Sobre o requisito sobre o Running-Forer, aqui estão alguns detalhes.

Você precisa pegar o signals.spider_idle sinal, e em seu método que conectou ao sinal, você precisa aumentar um DontCloseSpider exceção. o spider_idle O sinal é enviado ao mecanismo de scrapy quando não há solicitações pendentes e, por padrão, a aranha será desligada. Você pode interceptar esse processo.

Veja os códigos soprar:

import scrapy
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher

class FooSpider(scrapy.Spider):
    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        dispatcher.connect(self.spider_idle, signals.spider_idle)

    def spider_idle(self):
        #you can revisit your portal urls in this method
        raise DontCloseSpider 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top