Maison  >  Article  >  développement back-end  >  Exploration de l'architecture sous-jacente et analyse du code source

Exploration de l'architecture sous-jacente et analyse du code source

WBOY
WBOYoriginal
2023-06-22 19:58:381103parcourir

Exploration de l'architecture sous-jacente de Scrapy et analyse du code source

Scrapy est un framework de robot d'exploration Web efficace basé sur Python, qui peut extraire rapidement et facilement des données de pages Web et prend en charge des formats de stockage et d'exportation de données diversifiés. Il est devenu le framework de choix pour de nombreux passionnés et développeurs de robots. Scrapy utilise un modèle d'E/S asynchrone et un mécanisme middleware dans son implémentation sous-jacente, ce qui le rend plus efficace et plus évolutif. Dans cet article, nous explorerons l'implémentation de Scrapy à la fois à partir de l'architecture sous-jacente et de l'analyse du code source.

1. L'architecture sous-jacente de Scrapy

L'architecture sous-jacente de Scrapy est principalement divisée en moteur, planificateur, téléchargeur, araignée et pipeline (Pipeline) et cinq autres modules. Ils effectuent leurs propres tâches dans Scrapy et travaillent ensemble pour rendre l'ensemble du processus d'exploration fluide et efficace.

  1. Engine

Le moteur de Scrapy sert de noyau à l'ensemble du framework d'exploration, responsable de la coordination de l'interaction entre les différents modules et du traitement de chaque événement et signaux entre les modules. Lorsque le moteur reçoit le signal de démarrage du robot, il obtiendra un objet de requête à explorer dans le planificateur, puis enverra l'objet au téléchargeur pour téléchargement. Une fois le téléchargement terminé, le téléchargeur enverra l'objet de réponse renvoyé au moteur. Le moteur L'objet Response sera d'abord transmis à Spider pour analyse, et un nouvel objet Request sera généré sur la base des résultats renvoyés par Spider, puis le nouvel objet Request sera envoyé au planificateur. Ce processus sera exécuté en boucle jusqu'à ce que la file d'attente du planificateur soit vide et le robot ne se terminera pas.

2. Planificateur (Scheduler)

Le planificateur est utilisé pour stocker et gérer tous les objets Request en attente d'être explorés et est responsable d'organiser l'ordre de leurs requêtes. Cela déduquera l'objet Request et supprimera les demandes de priorité inférieure. Lorsque le moteur a besoin d'obtenir le prochain objet Request à analyser, il appellera la méthode du planificateur pour l'obtenir. Chaque fois qu'un objet Request est téléchargé, le téléchargeur remettra l'objet Response renvoyé et l'objet Request correspondant au planificateur, et le planificateur les stockera dans la file d'attente des requêtes.

3. Downloader

Le downloader est principalement utilisé pour convertir l'objet Request passé par le moteur en un objet Response et le renvoyer au moteur. Le téléchargeur obtiendra le contenu de la page Web correspondante à partir de l'adresse URL spécifiée en envoyant une requête HTTP ou HTTPS. Le téléchargeur fournit également un middleware de téléchargement et vous pouvez ajouter un traitement personnalisé pendant le processus de téléchargement, tel qu'un proxy, une identification UA, un traitement des cookies, etc.

4. Spider (Spider)

Le module d'exploration est la véritable logique d'exploration. Il est principalement responsable de l'analyse du contenu de la page Web téléchargée et de l'encapsulation des résultats analysés dans des objets Item. . Renvoyez l'objet Item au moteur. Le module d'exploration nécessite généralement l'écriture d'une classe d'exploration personnalisée et la réécriture de certaines méthodes pour effectuer l'analyse des pages, l'encapsulation des objets Item et la génération d'objets Request.

5. Pipeline

Le module pipeline est utilisé pour effectuer une série de traitements sur les objets Item renvoyés par Spider, tels que le nettoyage des données, la déduplication et le stockage dans des bases de données ou les fichiers attendent. Dans Scrapy, vous pouvez écrire plusieurs classes de pipeline et former une chaîne de pipelines par ordre de priorité. Lorsque Spider renvoie l'objet Item, ces pipelines seront traités dans l'ordre.

2. Analyse du code source de Scrapy

  1. Classe Spider

La classe Spider est la classe la plus fondamentale de Scrapy, qui est la classe de base pour toutes les classes d'analyseur personnalisées et contient les principales méthodes d'implémentation du processus d'analyse.

Tout d'abord, nous devons définir certains attributs dans notre classe de robot, tels que le nom, les domaines_autorisés, les URL de démarrage, etc. Ces propriétés sont utilisées pour spécifier le nom du robot d'exploration, les noms de domaine autorisés à être analysés et l'adresse URL à partir de laquelle l'analyse commence.

En remplaçant la méthode start_requests(), nous pouvons générer le premier lot de requêtes et les transmettre au moteur pour analyse.

Ensuite, nous devons définir la méthode parse(), qui est principalement utilisée pour analyser le contenu de la page Web téléchargée, y compris l'extraction de données, la génération de nouveaux objets Request, etc. La méthode parse() sera appelée par le moteur. Dans cette méthode, la page Web sera analysée étape par étape, et enfin un objet Item ou un nouvel objet Request sera renvoyé.

  1. Classe Item

Dans Scrapy, la classe Item est utilisée pour encapsuler les données extraites des pages Web. Il s'agit en fait d'un objet dictionnaire. Différents types de champs de données peuvent être fournis dans l'objet Item, et une logique de traitement de données simple peut être implémentée dans le robot d'exploration, comme le nettoyage des données, le mappage des données, etc. L’objet Item sera finalement renvoyé au moteur et traité à son tour par le Pipeline.

  1. Module de paramètres

Le module de paramètres est utilisé pour définir les informations de configuration de Scrapy, y compris le nom du robot, le délai de demande, le nombre de simultanéités, délai de téléchargement, etc. Vous pouvez changer la façon dont Scrapy s'exécute en modifiant les options dans le module Paramètres. Dans le code du robot, le module Paramètres est accessible via l'attribut settings de la classe du robot. Toutes les options du module Paramètres sont enregistrées sous la forme d'un dictionnaire. Nous pouvons modifier les valeurs des options​​dans le module Paramètres directement dans le code, ou lire les informations de configuration à partir du fichier.

  1. Downloader Middleware

Le middleware de téléchargement de Scrapy peut intercepter les requêtes initiées par le téléchargeur et les réponses reçues, et peut répondre aux requêtes ou réponses Apporter des modifications et ajouter des agents , logos UA, cookies, etc. Scrapy prend en charge plusieurs middlewares, qui peuvent être exécutés séquentiellement par ordre de priorité. Le middleware intercepte et traite en remplaçant les méthodes process_request(), process_response() ou process_exception().

  1. Spider Middleware (Spider middleware)

Spider middleware est utilisé pour intercepter les entrées et les sorties de Spider. Il inclut le téléchargeur qui intercepte les requêtes. . Middleware et Spider Middleware qui interceptent la réponse. Le middleware intercepte et traite en remplaçant les méthodes process_spider_input() et process_spider_output().

Le framework Scrapy est très puissant et peut être adapté à une variété de sites Web. Il fournit des fonctions riches et des interfaces étendues, et est très adapté à l'exploration de données Web à grande échelle, efficace et stable. Mais en même temps, Scrapy présente également ses propres défauts, tels qu'une prise en charge insuffisante de l'exploration de sites Web rendus par JavaScript, une prise en charge insuffisante des requêtes en temps réel AJAX, etc. Ceux-ci doivent être combinés avec d'autres outils pour fonctionner ensemble.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn