Maison  >  Article  >  développement back-end  >  Comment Scrapy se connecte-t-il automatiquement pendant le processus d'exploration ?

Comment Scrapy se connecte-t-il automatiquement pendant le processus d'exploration ?

王林
王林original
2023-06-23 09:20:451218parcourir

Comment Scrapy se connecte-t-il automatiquement pendant le processus d'exploration ?

Lors de l'exploration des données d'un site Web, certains sites Web nécessitent une authentification de connexion de l'utilisateur pour parcourir des pages spécifiques ou obtenir plus de données. Dans le même temps, pour certaines données qui ne peuvent être obtenues qu'après la connexion, les ingénieurs des robots d'exploration utilisent souvent certaines opérations automatisées pour simuler la connexion au site Web afin de collecter les données des robots. Dans cet article, nous détaillerons comment implémenter la fonctionnalité de connexion automatique dans Scrapy.

  1. Créer une araignée de connexion

Créez une nouvelle araignée et nommez-la "login_spider". Le but de cette araignée est de terminer le travail de connexion simulé, c'est-à-dire de terminer le travail de connexion de l'utilisateur avant le démarrage du robot.

  1. Créer un formulaire de connexion

Retrouvez le formulaire sur la page de connexion et affichez le code html du formulaire.
Recherchez les champs à remplir (attribut name), tels que "nom d'utilisateur", "mot de passe", etc., et copiez-les.
Utilisez la méthode Selector pour rechercher les balises d'entrée correspondant à ces champs, utilisez la méthode extract() pour obtenir leurs valeurs et affectez-les aux valeurs clés correspondantes.

    def parse(self,response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'your_username', 'password': 'your_password'},
            callback=self.start_scraping
        )
  1. Écrivez une fonction de rappel lorsque l'araignée de connexion commence à s'exécuter

Ce que fait la fonction de rappel de connexion ici est d'obtenir la valeur du cookie de la réponse avec le jeton de connexion, de construire un nouvel objet Request et de transmettre le cookie (en-tête) valeur, fournie aux araignées commerciales ultérieures.

    def start_scraping(self, response):
        # Get CSRF token
        token = response.css('input[name="csrf_token"]::attr(value)').extract_first()
        logging.info('CSRF token obtained: ' + token)

        # Create cookie dict
        cookie = response.headers.getlist('Set-Cookie')
        cookie = [str(c, 'utf-8') for c in cookie]
        cookie_dict = {
            str(c.split('; ')[0].split('=')[0]): str(c.split('; ')[0].split('=')[1])
            for c in cookie
        }

        # Store cookie dict in spider settings
        self.settings.set('COOKIE_DICT', cookie_dict, priority='cmdline')

        # Start scraping main website
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie}
        )
  1. Utilisez des cookies pour émettre des requêtes avec des informations utilisateur

Après vous être connecté au spider, appelez la méthode start_requests pour envoyer la première requête. Obtenez la valeur de cookie_dict stockée à l'étape précédente à partir des paramètres et transmettez-la au robot d'exploration à l'aide du paramètre headers.

    def start_requests(self):
        cookie = self.settings.get('COOKIE_DICT')
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie},
            meta={'login': True}
        )
  1. Créez une araignée d'entreprise

Utilisez les informations des cookies pour accéder à la véritable page cible après la connexion. Lors de la personnalisation du Business Spider, toutes les URL impliquées qui doivent obtenir des informations sur les cookies sont accessibles à l'aide des informations sur les cookies. Ce qui suit est un simple code d'araignée d'entreprise

    class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        yield scrapy.Request('https://www.example.com/real-target-url/', callback=self.parse, headers={'Cookie': self.settings.get('COOKIE_DICT')})

    def parse(self, response):
        # Do whatever you want with the authenticated response

Grâce aux étapes ci-dessus, nous pouvons utiliser le framework Scrapy pour implémenter la fonction de connexion simulée. En portant la valeur du cookie, Scrapy peut continuer à capturer les données qui nécessitent une vérification de connexion sans se déconnecter. Bien que cela puisse poser des problèmes de sécurité, cette solution est réalisable lors de l’apprentissage des robots d’exploration et de la conduite de recherches à des fins académiques.

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