Como construir um rastreador da Web com base no SCRAPY para correr para sempre?
-
23-09-2019 - |
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:
Correr para sempre
Significa que ele periodicamente visitará algumas páginas do portal para obter atualizações.
Agendar prioridades.
Dê prioridades diferentes para diferentes tipos de URLs.
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!
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.
- 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á.
- 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á.
- 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