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 ?
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.
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.
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 )
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} )
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} )
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!