Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es el significado de rastreador distribuido de Python?

¿Cuál es el significado de rastreador distribuido de Python?

I. Arquitectura de rastreador distribuido

Antes de comprender la arquitectura de rastreador distribuido, primero revise la arquitectura de Scrapy, como se muestra a continuación.

El rastreador independiente Scrapy tiene una cola de rastreador local, que se implementa mediante el módulo deque. Si se genera una nueva solicitud, se coloca en una cola y el programador programa la solicitud. Luego, la solicitud se entrega al descargador para que la recupere. En la siguiente figura se muestra una arquitectura de programación simple.

Si dos programadores reciben solicitudes de la cola al mismo tiempo y cada programador tiene su propio descargador correspondiente, entonces, si hay suficiente ancho de banda para el rastreo normal, independientemente de la presión de acceso a la cola, ¿cuál será el eficiencia de rastreo? Así es, la eficiencia del rastreo se duplicará.

De esta manera, el Programador se puede expandir a múltiples y el Descargador también se puede expandir a múltiples. La cola de recuperación siempre debe ser una, es decir, solo puedes disfrutar de la cola de recuperación. Esto garantiza que después de que el programador programe una solicitud de la cola, otros programadores no volverán a programar la solicitud y varios programadores podrán capturarla sincrónicamente. Este es el prototipo básico de un rastreador distribuido. La arquitectura de programación simple es la siguiente.

Lo que debemos hacer es ejecutar tareas de rastreo en varios hosts al mismo tiempo para el rastreo. El requisito previo para el rastreo colaborativo es que *** tenga acceso a la cola de rastreo. De esta manera, cada host no necesita mantener su propia cola de rastreo, pero accede a la Solicitud desde la cola de rastreo compartida. Pero cada host todavía tiene su propio Programador y Descargador, por lo que las funciones de programación y descarga se completan por separado. Si no se tiene en cuenta el consumo de rendimiento del acceso a la cola, la eficiencia del rastreo seguirá aumentando exponencialmente.

En segundo lugar, mantenimiento de la cola de rastreo

Entonces, ¿qué se debe mantener en esta cola? Lo primero a considerar es el rendimiento. Naturalmente, pensamos en el almacenamiento basado en memoria Redis, que admite una variedad de estructuras de datos, como lista, conjunto, conjunto ordenado, etc., y las operaciones de acceso son muy simples.

Cada una de estas estructuras de datos compatibles con Redis tiene sus propias ventajas.

La lista tiene métodos lpush(), lpop(), rpush(), rpop() que podemos usar para implementar la cola de rastreo FIFO o la cola de rastreo de pila FIFO.

Los elementos del conjunto están desordenados y no se repiten, lo que hace que sea muy fácil implementar una cola de rastreo ordenada aleatoriamente y no repetitiva.

El conjunto ordenado tiene una representación fraccionaria, y el Request de Scrapy también tiene control de prioridad, que podemos usar para implementar una cola con programación de prioridades.

Necesitamos elegir de manera flexible diferentes colas según las necesidades de rastreadores específicos.

3. Cómo eliminar duplicados

Scrapy tiene una función de deduplicación automática y su función de deduplicación utiliza una colección en Python. Esta colección registra la huella digital de cada solicitud en Scrapy, que en realidad es el valor hash de la solicitud. Podemos ver el código fuente de Scrapy de la siguiente manera:

import?hashlib

def?request_fingerprint(request, include_headers=None):

if?include_ headers :

include_headers = tuple(to_bytes(h. lower()

include_headers = tuple(to_bytes(h. lower()