Frontera es una fuente abierta , el rastreo web marco de la aplicación de rastreo frontera componentes y proporcionar primitivas de escalabilidad para aplicaciones rastreador web.
Autor (es) original (es) | Alexander Sibiryakov, Javier Casas |
---|---|
Desarrollador (es) | Scrapinghub Ltd., comunidad de GitHub |
Versión inicial | 1 de noviembre de 2014 |
Lanzamiento estable | v0.8.1 / 5 de abril de 2019 [1] |
Escrito en | Pitón |
Sistema operativo | OS X , Linux |
Tipo | rastreo web |
Licencia | Licencia BSD de 3 cláusulas |
Sitio web | github |
Descripción general
El contenido y la estructura de la World Wide Web cambian rápidamente. Frontera está diseñado para poder adaptarse rápidamente a estos cambios. La mayoría de los rastreadores web a gran escala operan en modo por lotes con fases secuenciales de inyección, recuperación, análisis, deduplicación y programación. Esto provoca un retraso en la actualización del rastreo cuando cambia la web. El diseño está principalmente motivado por el rendimiento de acceso aleatorio relativamente bajo de los discos duros en comparación con el acceso secuencial. Frontera, en cambio, se basa en sistemas modernos de almacenamiento de valor clave , que utilizan estructuras de datos eficientes y hardware potente para rastrear, analizar y programar la indexación de nuevos enlaces al mismo tiempo. Es un proyecto de código abierto diseñado para adaptarse a varios casos de uso, con alta flexibilidad y capacidad de configuración.
Los rastreos web a gran escala son el único propósito de Frontera. Su flexibilidad permite rastreos de tamaño moderado en una sola máquina con algunos núcleos al aprovechar los modos de ejecución de proceso único y arañas distribuidas.
Características
Frontera está escrito principalmente en Python . El transporte de datos y los formatos están bien abstraídos y las implementaciones listas para usar incluyen soporte para MessagePack , JSON , Kafka y ZeroMQ .
- Operación en línea: pequeños lotes de solicitudes, con análisis realizado inmediatamente después de la recuperación.
- Arquitectura de backend conectable: la lógica de almacenamiento de bajo nivel está separada de la política de rastreo.
- Tres modos de ejecución: proceso único, arañas distribuidas, backend distribuido y arañas.
- Flujo de datos transparente, que permite integrar componentes personalizados fácilmente.
- Abstracción de bus de mensajes, que proporciona una forma de implementar su propio transporte (ZeroMQ y Kafka están disponibles de forma inmediata).
- Backends de almacenamiento SQLAlchemy y HBase .
- Revisando la lógica (solo con backend RDBMS).
- Uso opcional de Scrapy para buscar y analizar.
- Licencia BSD de 3 cláusulas , que permite su uso en cualquier producto comercial.
- Soporte de Python 3.
Comparación con otros rastreadores web
Aunque Frontera no es un rastreador web en sí mismo, requiere una arquitectura de rastreo de transmisión en lugar de un enfoque de rastreo por lotes. [ cita requerida ]
StormCrawler es otro rastreador orientado a la transmisión construido sobre Apache Storm mientras utiliza algunos componentes del ecosistema Apache Nutch. Scrapy Cluster fue diseñado por ISTResearch con un control y una gestión precisos de la cola en mente. Estos sistemas proporcionan mecanismos de búsqueda y / o cola, pero no una base de datos de enlaces o procesamiento de contenido.
Prueba de batalla
En Scrapinghub Ltd. hay un rastreador que procesa 1600 solicitudes por segundo en el pico, construido utilizando principalmente Frontera usando Kafka como bus de mensajes y HBase como almacenamiento para estados de enlace y base de datos de enlace. Dicho rastreador funciona en ciclos, cada ciclo tarda 1,5 meses y da como resultado 1,700 millones de páginas descargadas. [2]
El rastreo de Internet en español resultó en 46,5 millones de páginas en 1,5 meses en el clúster de AWS con 2 máquinas araña. [3]
Historia
La primera versión de Frontera operó en un solo proceso, como parte del programador personalizado para Scrapy , utilizando una base de datos SQLite en el disco para almacenar los estados de los enlaces y la cola. Pudo gatear durante días. Después de llegar a un volumen notable de enlaces, comenzó a dedicar cada vez más tiempo a las consultas SELECT, lo que hizo que el rastreo fuera ineficaz. En esta ocasión, Frontera se desarrolla bajo el programa Memex de DARPA y se incluye en su catálogo de proyectos de código abierto. [4]
En 2015, las versiones posteriores de Frontera utilizaron HBase para almacenar la base de datos de enlaces y la cola. La aplicación se distribuyó en dos partes: backend y fetcher. El backend era responsable de comunicarse con HBase por medio de Kafka y fetcher solo leía el tema de Kafka con URL para rastrear y producía resultados de rastreo a otro tema consumido por el backend, creando así un ciclo cerrado. Durante ese tiempo se implementó un prototipo de cola de primera prioridad adecuado para el rastreo a escala web. La cola estaba produciendo lotes con límites en una cantidad de hosts y solicitudes por host.
El siguiente hito significativo del desarrollo de Frontera fue la introducción de la estrategia de rastreo y el trabajador de estrategia, junto con la abstracción del bus de mensajes. Se hizo posible codificar la estrategia de rastreo personalizada sin tener que lidiar con el código de backend de bajo nivel que opera con la cola. Una manera fácil de decir qué enlaces deberían programarse, cuándo y con qué prioridad hizo de Frontera un verdadero marco de rastreo de fronteras. Kafka era un requisito bastante pesado para los rastreadores pequeños y la abstracción del bus de mensajes permitía integrar casi cualquier sistema de mensajería con Frontera.
Ver también
- Documentación de Frontera en ReadTheDocs.
Referencias
- ^ "Lanzamientos · Scrapinghub / frontera" . github.com . Consultado el 7 de abril de 2021 .
- ^ Sibiryakov, Alexander (29 de marzo de 2017). "Frontera: архитектура фреймворка для обхода веба и текущие проблемы" . Habrahabr .
- ^ Sibiryakov, Alexander (15 de octubre de 2015). "frontera-open-source-large-scale-web-crawling-framework" . Speakerdeck .
- ^ "Catálogo abierto, Memex (búsqueda específica de dominio)" .