Na lição anterior, aprendemos sobre os princípios básicos do Scrapy-Redis. Nesta lição, combinaremos os casos anteriores para implementar um rastreador distribuído baseado no Scrapy-Redis.
1. Preparação ambiental
Nesta seção do caso, nos baseamos no caso de rastreamento de página de renderização dinâmica da Aula 46-Scrapy e Pyppeteer para aprender, precisamos reescrevê-lo em um rastreador distribuído baseado em Redis.
Em primeiro lugar, precisamos baixar o código, seu endereço GitHub é https://github.com/Python3WebSpider/ScrapyPyppeteer , entre no projeto, tente executar o código para garantir que ele possa ser executado sem problemas, o efeito de execução é mostrado na figura:
Em segundo lugar, precisamos ter um banco de dados Redis. Você pode baixar o pacote de instalação diretamente e instalá-lo ou pode usar o Docker para iniciá-lo e garantir a conexão e o uso normais. Por exemplo, iniciei um banco de dados Redis no localhost local aqui, em execução na porta 6379. A senha está vazia.
Além disso, também precisamos instalar o pacote Scrapy-Redis, o comando de instalação é o seguinte:
pip3 install scrapy-redis
Após a instalação, certifique-se de que pode ser importado e usado normalmente.
2. Perceba
Em seguida, precisamos apenas de algumas etapas simples para configurar o rastreador distribuído.
2.1 Modificar Agendador
Na lição anterior, explicamos o conceito de Scheduler, que é usado para processar a lógica de agendamento de Request, Item e outros objetos. Por padrão, a fila de Request está na memória. Para conseguir distribuir, precisamos migrar a fila No Redis, precisamos modificar o Scheduler neste momento. A modificação é muito simples, basta adicionar o seguinte código em settings.py:
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
Aqui, modificamos a classe Scheduler para a classe Scheduler fornecida por Scrapy-Redis, para que, quando executarmos o rastreador, a fila de solicitações apareça no Redis.
2.2 Modificar informações de conexão do Redis
Além disso, precisamos modificar as informações de conexão do Redis para que o Scrapy possa se conectar com êxito ao banco de dados do Redis. O formato de modificação é o seguinte:
REDIS_URL = 'redis://[user:pass]@hostname:9001'
Aqui precisamos modificar de acordo com o formato acima. Como meu Redis está sendo executado localmente, não há necessidade de preencher o nome de usuário e a senha aqui, apenas defina-os da seguinte maneira:
REDIS_URL = 'redis://localhost:6379'
2.3 Modifique a classe de desduplicação
Como a fila de solicitações foi migrada para o Redis, também precisamos migrar as operações de desduplicação correspondentes para o Redis. Na lição anterior, explicamos o princípio do Dupefilter. Aqui, modificaremos a reclassificação para obter a desduplicação baseada no Redis:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
2.4 Resistência de colocação
De modo geral, após a fila distribuída Redis ser ativada, não queremos que o rastreador exclua toda a fila e as informações de desduplicação quando for fechada, porque é muito provável que fechemos manualmente o rastreador ou o rastreador será encerrado inesperadamente em alguns casos. Para este problema, podemos configurar a persistência da fila Redis e modificá-la da seguinte maneira:
SCHEDULER_PERSIST = True
Bem, até agora concluímos a configuração do rastreador distribuído.
3. Corra
O que fizemos acima não é um rastreador distribuído real, porque usamos Redis local para a fila do Redis, portanto, vários rastreadores precisam ser executados localmente. Se você deseja obter um rastreador distribuído real, pode usar o remoto Redis, para que possamos executar rastreadores em vários hosts para se conectar a este Redis para obter um rastreador verdadeiramente distribuído
Mas não importa, podemos iniciar vários rastreadores localmente para verificar o efeito do rastreamento. Executamos os seguintes comandos em várias janelas de linha de comando:
scrapy crawl book
O primeiro rastreador tem os seguintes efeitos operacionais:
Não feche esta janela neste momento, abra outra janela e execute o mesmo comando de rastreamento:
scrapy crawl book
O efeito da operação é o seguinte:
neste momento, podemos observar que ele começa a rastrear a partir da página 24, porque a fila de rastreamento atual contém a solicitação de rastreamento gerada pelo primeiro rastreador, e o segundo rastreador detecta a existência de Solicitação quando começa a ler diretamente Pegue a solicitação existente e rastreie-a.
Da mesma forma, podemos iniciar o terceiro e o quarto rastreadores para obter a mesma função de rastreamento. Desta forma, implementamos com sucesso a função básica de rastreador distribuído com base no Scrapy-Redis.
Certo, o conteúdo desta aula acabou. Nos vemos na próxima aula.