Table des matières:
- Étape 1: Rassemblez les matériaux
- Étape 2: Trouvez les en-têtes nécessaires pour créer une session
- Étape 3: préparer le code
- Étape 4: Envoyez les bons signaux
- Étape 5: Cookies mécanisés
- Étape 6: La clé du cœur
Vidéo: Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone : 6 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:10
Le problème: les outils Spidering ne permettent pas l'authentification de connexion AJAX.
Cette instructable vous montrera comment vous connecter via un formulaire AJAX à l'aide de Python et d'un module appelé Mechanize. Les araignées sont des programmes d'automatisation Web qui deviennent un moyen de plus en plus populaire pour les gens de collecter des données en ligne. Ils se glissent sur le Web en rassemblant des matériaux précieux pour alimenter les sociétés Web les plus puissantes du monde. D'autres rampent et rassemblent des ensembles de données spécifiques pour améliorer la prise de décision, ou déduire ce qui est actuellement "dans", ou trouver les itinéraires de voyage les moins chers. Les araignées (web crawlers, webbots ou screen scrapers) sont idéales pour transformer le goop HTML en un semblant de données intelligentes, mais nous avons un problème en ce qui concerne les pages Web compatibles AJAX qui ont des sessions JavaScript et des cookies activées qui ne sont pas navigables avec la normale ensemble d'outils d'araignée. Dans ce instructable, nous accéderons à notre propre page de membre sur pubmatic.com. Ces étapes vous montreront une méthode à suivre, mais votre page sera différente. S'amuser!
Étape 1: Rassemblez les matériaux
Vous devrez commencer à compléter vos ressources de programmation. Vous aurez besoin des programmes suivants. Utilisez leurs guides pour vous aider à installer ces…Installez FirebugC'est un module complémentaire FirefoxInstallez PythonAllez à: python.orgAllez à: python.orgInstallez le module MechanizeGet MechanizeGet MechanizeAutres outils utiles Spidering:BeautifulSoup
Étape 2: Trouvez les en-têtes nécessaires pour créer une session
Une araignée bien conçue accédera à une page Web comme s'il s'agissait d'un navigateur contrôlé par un être humain gardant cachés des indices quant à sa véritable origine. Une partie de l'interaction entre les navigateurs et les serveurs se fait via les requêtes GET et POST que vous pouvez retrouver dans les en-têtes (cette information est rarement affichée sur un navigateur, mais est très importante). Vous pouvez afficher certaines de ces informations en appuyant sur Ctrl I (dans Firefox) pour ouvrir la fenêtre Informations sur la page. Pour vous déguiser en navigateur aux manières douces, vous devez vous identifier en utilisant les mêmes identifiants. Donc, étant donné que la plupart des navigateurs spider n'ont pas d'interpréteur javascript, nous devrons nous connecter via une route alternative. Commençons par obtenir les informations d'en-tête envoyées par le navigateur lorsque vous cliquez sur Soumettre. S'il s'agissait d'une connexion de navigateur ordinaire, vous utiliseriez Mechanize pour remplir le formulaire et cliquer sur soumettre. Les formulaires de connexion normaux sont encapsulés dans une balise … et Mechanize serait en mesure de soumettre cela et d'interroger la page suivante sans problème. Comme nous n'avons pas de balise de formulaire remplie, la fonction de soumission est gérée par javascript. Vérifions la fonction submitForm de pubmatic. Pour ce faire, ouvrez d'abord la page Web dans Firefox et activez Firebug en cliquant sur la luciole dans le coin inférieur droit. Cliquez ensuite sur l'onglet script, copiez tout le code qui apparaît et collez-le dans votre logiciel d'édition de texte préféré. Vous pouvez alors supprimer tout le code sauf la fonction submitForm. Cela commence par la fonction "submitForm(theform) {" et tout ce qui se trouve entre cela et les fonctions fermant l'accolade "}". En analysant cette fonction très primitivement, nous remarquons qu'une authentification se produit en ramenant une variable appelée xmldoc qui est analysée comme xml. C'est une caractéristique clé d'AJAX, il a interrogé le serveur et ramené un document XML contenant une arborescence d'informations. Le nœud session_id contient le session_id si l'authentification a réussi, vous pouvez le savoir en regardant ce bout de code: "if (session_id != null) { //connexion réussie". Maintenant, nous voulons empêcher ce bit de javascript de nous emmener n'importe où afin que nous puissions voir ce qui est publié sur le serveur lors de l'authentification. Pour ce faire, nous commentons toutes les redirections de fenêtre qui ressemblent à ceci: "window.location=…". Pour commenter ceci, ajoutez des doubles barres obliques avant comme ceci: "//window.location…" cela empêche l'exécution du code. Vous pouvez télécharger le fichier Javascript ci-dessous qui contient ces modifications déjà effectuées. Copiez et collez ce bit modifié de javascript dans la fenêtre de la console à droite et cliquez sur Exécuter. Cela remplace la fonction javascript déjà présente dans la page avec notre nouvelle version. Maintenant, lorsque vous remplissez vos informations d'identification et cliquez sur soumettre, vous devriez voir les informations d'en-tête POST et GET remplir la console, mais vous n'irez nulle part. Les informations POST sont les informations envoyées au serveur par les fonctions AJAX, vous voulez être autant comme cela que possible, copiez et collez ces informations dans le bloc-notes.
Étape 3: préparer le code
Avant d'ajouter les nouveaux en-têtes que nous avons trouvés, créons un modèle de code python de connexion Mechanize. Nous faisons cela pour deux raisons, d'abord nous avons un composant qui fonctionne pour ajouter de nouvelles choses et ensuite vous voyez comment vous vous connecteriez normalement à une page Web non AJAX-y. Ouvrez le bloc-notes ou équivalent, et copiez et collez le Suivant. Lorsque vous avez terminé, enregistrez-le sous youfilename.py quelque part que vous pouvez trouver.#!/usr/bin/python# -*- coding: utf-8 -*-#Start with your module imports:from mechanize import Browser #Create your instance de navigateur via l'appel de fonction Browser();br = Browser()#Configurez le navigateur pour qu'il ignore les requêtes spiders.txt#Faites ceci avec précaution, si la page Web n'aime pas les araignées, elles pourraient être contrariées de vous y trouverbr.set_handle_robots(False) #Ouvrez la page à laquelle vous souhaitez vous connecter tobr.open("https://pubmatic.com/04_betasignin.jsp")#Parce que je connais le nom du formulaire, je peux simplement sélectionner le formulaire par le nombr.select_form ("login")#En utilisant les noms des éléments du formulaire, je saisis les noms des éléments du formulairebr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () envoie le formulaire et extrait la page résultante, vous créez une nouvelle instance de navigateur#response ci-dessous contient la pageréponse résultante = br.submit()#Cela imprimera le corps de la page Web reçue#print response.read()
Étape 4: Envoyez les bons signaux
Mechanize a une fonction simple pour ajouter des en-têtes aux en-têtes POST, cela nous permettra d'apparaître dans le même navigateur que celui que vous avez utilisé pour accéder à la page la première fois. Ouvrez le fichier avec les en-têtes que vous avez trouvés à l'aide de Firebug et modifiez ce fichier texte pour qu'il corresponde. Remplacez tout dans les guillemets par l'élément approprié de la liste d'en-tête: USER_AGENT = "Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.8.1.9) Gecko/20071102 Pardus/2007 Firefox/2.0.0.9" HOST = "pubmatic.com"ACCEPT = "text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q= 0.5"ACCEPT_LANGUAGE = "en-us, en;q=0.5"ACCEPT_ENCODING = "gzip, deflate"ACCEPT_CHARSET = "ISO-8859-1, utf-8;q=0.7, *;q=0.7"KEEP_ALIVE = "300" CONNECTION = "keep-alive"CONTENT_TYPE = "application/x-www-form-urlencoded"REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH = "60"COOKIE = "utma=103266945.1970108054.1210113004.1212104087.1212791201.20; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(aucun); JSESSIONID=60F194BE2A5D31C3EwoMAC=TomcatmC3E38618995EB82" no-cache"CACHE_CONTROL ="no-cache"Cela crée un ensemble de variables que vous pouvez ensuite utiliser pour ajouter à l'en-tête us ing ce code: br.add_header = [("Host", HOST)]br.add_headers = [("User-agent", USER_AGENT)]br.add_headers = [("Accept", ACCEPT)]br.add_header = [("Accept-Language", ACCEPT_LANGUAGE)]br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)]br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)]br.add_header = [("Keep-Alive ", KEEP_ALIVE)]br.add_headers = [("Connection", CONNECTION)]br.add_header = [("Content-Type", CONTENT_TYPE)]br.add_header = [("Referer", REFERER)]br.add_header = [("Content-Length", CONTENT_LENGTH)]br.add_headers = [("Cookie", COOKIE)]br.add_headers = [("Pragma", PRAGMA)]br.add_headers = [("Cache-Control", CACHE_CONTROL)]Maintenant, lorsque nous appelons la fonction d'ouverture de page, les en-têtes seront également envoyés au serveur. br.open("https://pubmatic.com/04_betasignin.jsp")
Étape 5: Cookies mécanisés
Cette étape est due au fait que mécaniser automatise la gestion des cookies, mais il est important de savoir ce qui se passe:
Lorsque le formulaire est soumis, vous avez les bons en-têtes comme si vous aviez soumis en utilisant la fonction javascript. Le serveur authentifie ensuite ces informations et génère un identifiant de session et l'enregistre dans un cookie si le nom d'utilisateur et le mot de passe sont corrects. La bonne nouvelle est que Mechanize mange et régurgite automatiquement les cookies, vous n'avez donc pas à vous soucier de l'envoi et de la réception du cookie. Ainsi, une fois que vous avez créé un identifiant de session qui fonctionne, vous pouvez ensuite entrer dans la section réservée aux membres du site Web.
Étape 6: La clé du cœur
Maintenant que nous avons acquis un identifiant de session et que Mechanize l'a enregistré dans ses cookies, nous pouvons suivre le javascript pour voir où nous devons aller. En regardant à l'intérieur du "if (session_id != null) { //connexion réussie" pour voir où aller en cas de succès. En regardant le code de relocalisation de la fenêtre: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Math.random()*10000;" nous voyons que nous devons aller sur un site Web situé à l'adresse https://pubmatic.com/05_homeloggedin.jsp?v=some random number. Créons donc simplement un faux nombre aléatoire à saisir et créons une nouvelle instance de navigateur pour lire la page fraîchement ouverte:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")Et cela devrait que ce soit. Votre code est maintenant terminé, en utilisant les en-têtes appropriés et en mécanisant le gestionnaire de cookies, nous pouvons maintenant accéder aux entrailles de pubmatic. Ouvrez le terminal, chargez le package python ci-dessous et connectez-vous. Pour ce faire, tapez python2.5, puis le chemin d'accès au fichier.py.
Conseillé:
Détecter les obstacles de manière asynchrone avec les ultrasons : 4 étapes
Détecter les obstacles de manière asynchrone avec les ultrasons : je construis pour le plaisir un robot que je veux déplacer de manière autonome à l'intérieur d'une maison. C'est un long travail et je fais étape par étape. Cette mise au point instructable sur la détection des obstacles avec Arduino Mega. Les capteurs à ultrasons HC-SR04 vs HY-SRF05 sont bon marché et
Serre impressionnante avec arrosage automatique, connexion Internet et bien plus encore : 7 étapes (avec photos)
Serre impressionnante avec arrosage automatique, connexion Internet et bien plus encore : bienvenue dans ce Instructables. Début mars, j'étais dans une jardinerie et j'ai vu des serres. Et comme je voulais faire un projet avec des plantes et de l'électronique depuis longtemps déjà, je me suis lancé et j'en ai acheté un : https://www.instagram.com/p
Guide de connexion PLSD : connexion à des téléviseurs Apple via AirPlay [non officiel] : 10 étapes
Guide de connexion PLSD : connexion aux Apple TV via AirPlay [non officiel] : le guide suivant est fourni pour illustrer le processus de connexion aux Apple TV des salles de conférence via AirPlay. Cette ressource non officielle est fournie à titre gracieux à l'administration, au personnel et aux invités autorisés du district scolaire local de Perkins
Créer un formulaire Web : 6 étapes
Création d'un formulaire Web : il s'agit d'une instruction simple sur la façon de créer un formulaire Web. Ce serait une petite introduction sur la façon de créer un site Web et comment y mettre du contenu et ce qui peut être développé à l'avenir
Bande LED contrôlée par site Web/WiFi avec Raspberry Pi : 9 étapes (avec photos)
Bande LED contrôlée par site Web/WiFi avec Raspberry Pi : Contexte : Je suis un adolescent et je conçois et programme de petits projets électroniques depuis quelques années, tout en participant à des compétitions de robotique. Je travaillais récemment sur la mise à jour de la configuration de mon bureau et j'ai décidé qu'un bel ajout