Aula 49: Introdução ao combate real, implementação distribuída de Scrapy-Redis

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:
Insira a descrição da imagem aqui

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:
Insira a descrição da imagem aqui
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:
Insira a descrição da imagem aqui
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.

Acho que você gosta

Origin blog.csdn.net/weixin_38819889/article/details/108309308
Recomendado
Clasificación