[rastreador de Python]: la implementación del administrador de URL

administrador de URL del rastreador de Python

El papel del administrador de URL

  • En el rastreador de Python, el Administrador de URL (Administrador de URL) es un componente importante para administrar eficazmente las URL involucradas en el proceso de rastreo. Es principalmente responsable de las siguientes tareas:

    • Deduplicación de URL (desduplicación) : durante el proceso de rastreo, la misma URL se rastreará repetidamente, lo que no solo desperdicia tiempo y recursos, sino que también puede provocar la duplicación de datos. El administrador de URL garantiza que cada URL se rastree solo una vez manteniendo una colección de URL que ya se han rastreado, evitando la duplicación.

    • Programación de URL (orden de programación) : el rastreador debe decidir qué URL rastrear a continuación. El administrador de URL es responsable de seleccionar la siguiente URL a rastrear de acuerdo con una determinada estrategia y puede utilizar diferentes estrategias de programación, como primero en entrar, primero en salir (FIFO), último en entrar, primero en salir (LIFO) y colas de prioridad.

    • Adición de nuevas URL : cuando se analizan nuevas URL desde una página web, el administrador de URL es responsable de agregar estas nuevas URL a la cola de URL que se rastrearán, para garantizar que el rastreador pueda explorar nuevas páginas continuamente.

    • Gestión del estado de la URL : el administrador de URL puede registrar el estado de cada URL, como si se rastreó, si tuvo éxito, la cantidad de fallas, etc. Esto ayuda con la optimización y el manejo de errores durante los rastreos posteriores.

    • Persistencia de datos : después de que se ejecuta el rastreador, el administrador de URL generalmente guarda las URL rastreadas para que se pueda restaurar el estado anterior en la próxima ejecución.

  • El administrador de URL generalmente consta de dos partes: la cola de URL que se rastrearán (la colección de URL que se rastrearán) y la colección de URL que se rastrearán . Estas dos partes trabajan juntas para garantizar que el rastreador pueda ejecutarse de manera eficiente, no rastrear URL repetidamente y programar URL de acuerdo con las estrategias adecuadas.

En resumen, el administrador de URL juega un papel importante en la integración, coordinación, deduplicación y programación en el rastreador, ayudando al rastreador a obtener la información requerida de manera más eficiente.

Implementación de Python

class UrlManager():
    """url管理器"""

    def __init__(self):
        # 初始化待爬取url和已爬取url
        self.new_urls = set()
        self.old_urls = set()
    
    def add_new_url(self, url):
        """添加新的url"""
        if (url is None) or (len(url) == 0):
            return("Error! The URL to be added is empty")
        if (url in self.new_urls) or (url in self.old_urls):
            return('Error! The URL to be added already exists')
        self.new_urls.add(url)
    
    def add_new_urls(self, urls):
        """批量添加新的url"""
        if (urls is None) or (len(urls) == 0):
            return("Error! The URLs to be added is empty")
        
        for url in urls:
            self.add_new_url(url)
    
    def get_url(self):
        """获取爬取url,并记录"""
        if self.find_new_url():
            url = self.new_urls.pop()
            self.old_urls.add(url)
            return url
        else:
            return("Crawling completed, the URL to be crawled is empty")
    
    def find_new_url(self):
        return len(self.new_urls) > 0
    

if __name__ == "__main__":
    url_manager = UrlManager()
    url_manager.add_new_url('url1')
    url_manager.add_new_urls(['url1','url2'])
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    new_url = url_manager.get_url()
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    new_url = url_manager.get_url()
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    print(url_manager.find_new_url())


"""
output:
new_urls:{'url2', 'url1'}, old_urls:set()
++++++++++++++++++++++++++++++
new_urls:{'url1'}, old_urls:{'url2'}
++++++++++++++++++++++++++++++
new_urls:set(), old_urls:{'url2', 'url1'}
++++++++++++++++++++++++++++++
False
"""

Supongo que te gusta

Origin blog.csdn.net/qq_38734327/article/details/132553192
Recomendado
Clasificación