Inhaltsverzeichnis:

Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular - Gunook
Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular - Gunook

Video: Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular - Gunook

Video: Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular - Gunook
Video: Der Bodyscanner mit Marc Bator | Verstehen Sie Spaß? 2024, November
Anonim
Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular
Spidern einer Ajax-Website mit einem asynchronen Anmeldeformular

Das Problem: Spidering-Tools erlauben keine AJAX-Login-Authentifizierung.

Dieses anweisbare zeigt Ihnen, wie Sie sich über ein AJAX-Formular mit Python und einem Modul namens Mechanize anmelden. Spider sind Web-Automatisierungsprogramme, die immer beliebter werden, um Daten online zu sammeln. Sie kriechen im Internet herum und sammeln wertvolle Materialien, um die mächtigsten Internetunternehmen zu befeuern. Andere kriechen herum und sammeln bestimmte Datensätze, um die Entscheidungsfindung zu verbessern oder abzuleiten, was gerade "in" ist, oder die günstigsten Reiserouten zu finden. Spider (Webcrawler, Webbots oder Screen Scraper) eignen sich hervorragend, um HTML-Goop in einen Anschein von intelligenten Daten zu verwandeln, aber wir haben ein Problem mit AJAX-fähigen Webseiten mit JavaScript- und Cookie-aktivierten Sitzungen, die nicht mit dem normalen navigierbar sind Satz von Spidering-Tools. In diesem anweisbaren werden wir auf unsere eigene Mitgliedsseite bei pubmatic.com zugreifen. Diese Schritte zeigen Ihnen eine Methode, die Sie befolgen müssen, aber Ihre Seite wird anders sein. Spaß haben!

Schritt 1: Materialien sammeln

Materialien sammeln
Materialien sammeln

Sie müssen damit beginnen, Ihre Programmierressourcen zu ergänzen. Sie benötigen die folgenden Programme. Verwenden Sie ihre Anleitungen, um diese zu installieren…Firebug installierenEs ist ein Firefox-AddonInstallieren Sie PythonGehe zu: python.orgGehe zu: python.orgInstallieren Sie das Mechanize-ModulGet MechanizeGet MechanizeAndere nützliche Spidering-Tools:BeautifulSoup

Schritt 2: Finden Sie die Header, die zum Erstellen einer Sitzung erforderlich sind

Eine gut gemachte Spinne greift auf eine Webseite zu, als wäre es ein Browser, der von einem Menschen gesteuert wird, der Hinweise auf seinen wahren Ursprung versteckt. Ein Teil der Interaktion zwischen Browsern und Servern erfolgt über GET- und POST-Anfragen, die Sie in den Headern finden (diese Informationen werden selten in einem Browser angezeigt, sind aber sehr wichtig). Sie können einige dieser Informationen anzeigen, indem Sie Strg I (in Firefox) drücken, um das Seiteninfo-Fenster zu öffnen. Um sich als sanftmütiger Browser zu tarnen, müssen Sie sich mit den gleichen Zugangsdaten identifizieren. Wenn Sie sich mit deaktiviertem Javascript in Ihrem Browser bei pubmatic anmelden wollten, würden Sie nicht weit kommen, da die Weiterleitungen über Javascript erfolgen. Wenn man bedenkt, dass die meisten Spider-Browser keine Javascript-Interpreter haben, müssen wir uns über einen alternativen Router anmelden. Beginnen wir damit, die Header-Informationen abzurufen, die vom Browser gesendet werden, wenn Sie auf Senden klicken. Wenn dies eine normale Browser-Anmeldung wäre, würden Sie Mechanize verwenden, um das Formular auszufüllen und auf Senden zu klicken. Normale Login-Formulare sind in einem …-Tag gekapselt und Mechanize könnte dieses problemlos absenden und die nächste Seite abfragen. Da wir kein ausgefülltes Formular-Tag haben, wird die Absendefunktion über Javascript abgewickelt. Lassen Sie uns die Funktion "submitForm" von pubmatic überprüfen. Öffnen Sie dazu zunächst die Webseite in Firefox und aktivieren Sie Firebug, indem Sie auf das Glühwürmchen in der unteren rechten Ecke klicken. Klicken Sie dann auf die Registerkarte Skript, kopieren Sie den gesamten angezeigten Code und fügen Sie ihn in Ihre bevorzugte Textbearbeitungssoftware ein. Sie können dann den gesamten Code mit Ausnahme der Funktion submitForm löschen. Es beginnt mit der Funktion "submitForm(theform) {" und allem dazwischen und den Funktionen, die die geschweifte Klammer "}" schließen. Bei der sehr primitiven Analyse dieser Funktion stellen wir fest, dass eine Authentifizierung stattfindet, die eine Variable namens xmldoc zurückbringt, die als xml geparst wird. Dies ist eine Schlüsselfunktion von AJAX. Es hat den Server abgefragt und ein XML-Dokument zurückgebracht, das einen Informationsbaum enthält. Der Knoten session_id enthält die session_id, wenn die Authentifizierung erfolgreich war. Sie können dies anhand dieses Codes erkennen: "if (session_id != null) { //login success". Jetzt möchten wir verhindern, dass dieses Javascript uns irgendwohin führt, damit wir sehen können, was während der Authentifizierung an den Server gesendet wird. Dazu kommentieren wir alle Fensterumleitungen, die so aussehen: "window.location=…". Um dies auszukommentieren, fügen Sie doppelte Schrägstriche wie folgt hinzu: "//window.location…" Dies verhindert, dass der Code ausgeführt wird. Sie können die Javascript-Datei unten herunterladen, in der diese Änderungen bereits vorgenommen wurden. Kopieren Sie dieses bearbeitete Javascript und fügen Sie es in das Konsolenfenster rechts ein und klicken Sie auf Ausführen. Dies überschreibt die bereits in der Seite vorhandene Javascript-Funktion mit unserer neuen Version. Wenn Sie nun Ihre Anmeldeinformationen ausfüllen und auf Senden klicken, sollten die POST- und GET-Header-Informationen die Konsole ausfüllen, aber Sie werden nirgendwo hingehen. Die POST-Informationen sind die Informationen, die von den AJAX-Funktionen an den Server gesendet werden Kopieren Sie diese Informationen so wie möglich und fügen Sie sie in den Notizblock ein.

Schritt 3: Bereiten Sie den Code vor

Bevor wir die neuen Header hinzufügen, die wir gefunden haben, erstellen wir einen Schablonen-Anmelde-Python-Code für Mechanize. Wir tun dies aus zwei Gründen: Erstens haben wir eine Komponente, die funktioniert, um neue Dinge hinzuzufügen, und zweitens, damit Sie sehen, wie Sie sich normalerweise bei einer nicht AJAX-y-Webseite anmelden würden folgenden. Wenn Sie fertig sind, speichern Sie es als youfilename.py irgendwo, wo Sie es finden können.#!/usr/bin/python# -*- Coding: utf-8 -*-#Starten Sie mit Ihren Modulimporten:von Mechanize Import Browser #Create your Browser-Instanz über den Funktionsaufruf Browser();br = Browser()#Setzen Sie den Browser so, dass er die Anfragen von spiders.txt ignoriert#Machen Sie dies vorsichtig, wenn die Webseite keine Spider mag, könnten sie verärgert sein, Sie dort zu findenbr.set_handle_robots(False) #Öffnen Sie die Seite, auf der Sie sich anmelden möchten tobr.open("https://pubmatic.com/04_betasignin.jsp")#Da ich den Formularnamen kenne, kann ich das Formular einfach mit dem Namenbr.select_form auswählen ("login")#Mit den Namen der Formularelemente gebe ich die Namen der Formularelemente einbr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () sendet das Formular aus und ruft die resultierende Seite ab, Sie erstellen eine neue Browserinstanz#Antwort unten enthält die resultierende SeiteAntwort = br.submit()#Dies druckt den Text der empfangenen Webseite#print response.read()

Schritt 4: Senden Sie die richtigen Signale

Senden Sie die richtigen Signale
Senden Sie die richtigen Signale

Mechanize hat eine einfache Funktion zum Hinzufügen von Headern zum Header-POST. Dies ermöglicht es uns, in demselben Browser zu erscheinen, den Sie beim ersten Zugriff auf die Seite verwendet haben. Öffnen Sie die Datei mit den Headern, die Sie mit Firebug gefunden haben, und bearbeiten Sie diese Textdatei entsprechend. Ersetzen Sie alles in den Anführungszeichen durch das richtige Element aus der Kopfzeilenliste: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, de;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=(direkt)|utmcsr=(direkt)|utmcmd=(keiner); JSESSIONID=60F194BE2A5A5AG3C3861893; no-cache"CACHE_CONTROL ="no-cache"Dies erstellt eine Reihe von Variablen, die Sie dann verwenden können, um uns an den Header anzuhängen Geben Sie diesen Code ein: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)]Wenn wir nun die Funktion zum Öffnen der Seite aufrufen, werden auch die Header an den Server gesendet. br.open("https://pubmatic.com/04_betasignin.jsp")

Schritt 5: Mechanisierte Cookies

Mechanisierte Cookies
Mechanisierte Cookies

Dieser Schritt ist darauf zurückzuführen, dass Mechanize die Verarbeitung von Cookies automatisiert, aber es ist wichtig zu wissen, was passiert:

Wenn das Formular gesendet wird, haben Sie die richtigen Kopfzeilen, als ob Sie es mit der Javascript-Funktion gesendet hätten. Der Server authentifiziert dann diese Informationen und generiert eine Sitzungs-ID und speichert sie in einem Cookie, wenn Benutzername und Passwort korrekt sind. Die gute Nachricht ist, dass Mechanize Cookies automatisch isst und wieder ausstößt, sodass Sie sich keine Gedanken über das Senden und Empfangen des Cookies machen müssen. Sobald Sie also eine funktionierende Sitzungs-ID erstellt haben, können Sie den Bereich nur für Mitglieder der Website aufrufen.

Schritt 6: Schlüssel zum Herzen

Nachdem wir eine Sitzungs-ID erhalten und Mechanize in seinen Cookies gespeichert haben, können wir dem Javascript folgen, um zu sehen, wohin wir gehen müssen. Schauen Sie in das "if (session_id != null) { //login erfolgreich", um zu sehen, wo Sie bei Erfolg fortfahren können. Blick auf den Fensterverlagerungscode: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Math.zufällig () * 10000;" Wir sehen, dass wir zu einer Website gehen müssen, die sich unter https://pubmatic.com/05_homeloggedin.jsp?v=some random number befindet. Erstellen wir also einfach eine gefälschte Zufallszahl zur Eingabe und erstellen Sie eine neue Browserinstanz, um die frisch geöffnete Seite zu lesen:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")Und das sollte sei es. Ihr Code ist jetzt vollständig. Durch die Verwendung der richtigen Header und des mechanisierten Cookie-Handlers können wir jetzt auf das Innere von pubmatic zugreifen. Öffnen Sie das Terminal, laden Sie das unten stehende Python-Paket und melden Sie sich an. Geben Sie dazu python2.5 und dann den Dateipfad zur.py-Datei ein.

Empfohlen: