2017-11-09 1 views
2

Kann Scrapy eine Warnmeldung crawlen?Scrapy, um eine Warnmeldung mit Formularauthentifizierung zu umgehen

Der Link zum Beispiel http://domainhere/admin, sobald in einem aktuellen Browser geladen, eine Warnmeldung mit Formular vorhanden ist, um den Benutzernamen und das Passwort zu füllen.

Oder gibt es eine Möglichkeit, das Formular in einer Warnmeldung zu überprüfen, welche Parameter zu füllen sind?

PS: Ich habe Anmeldeinformationen für diese Website, ich möchte nur Prozesse durch Webcrawlen automatisieren.

Danke.

+0

Hier ist ein Beispiel https://github.com/nabinkhadka/movies-details-scraper – Nabin

+0

@Fan_of_Martijn_Pieters danke für diesen. Ich überprüfte den Code und es war hilfreich, aber das nächste Problem ist, wie für mich das DOM der Warnmeldung msg anzuzeigen. Wenn ich mit dem Link fortfahre, während ich nicht angemeldet bin, wird die Warnmeldung im Body angezeigt. – BLNK

+0

Ich muss den Selektor für den Inhalt in der Warnmeldung abrufen. Dann kann ich die Namen in den Eingaben als Parameter für das Formular angeben. – BLNK

Antwort

0

Was ich dies erreicht hatte, war indem Sie folgendermaßen vorgehen:

  1. Beobachtet, was nach der Authentifizierung Daten mit der Seite fortzufahren benötigt.
  2. Mit dem Entwicklerwerkzeug von Chrome auf der Registerkarte "Netzwerk" habe ich die Anforderungsheader überprüft. Nach der Beobachtung ist eine Autorisierung erforderlich.
  3. Um Schritt # 2 zu überprüfen, habe ich Postman verwendet. Wenn Sie den Authorization-Befehl in Postman, Basic Auth, verwenden, wird beim Auffüllen des Benutzernamens und des Kennworts derselbe Wert für den Authorization-Header generiert. Nach dem Senden einer POST-Anforderung wurde die gewünschte Seite geladen und die Authentifizierung umgangen.
  4. Verwenden Sie denselben Wert für die Autorisierung unter Anforderungsheader, und speichern Sie den Wert in der Scraper-Klasse.
  5. Verwenden Sie die scrapy.Request-Funktion mit Header-Parametern.

Code:

import scrapy 

class TestScraper(scrapy.Spider): 
    handle_httpstatus_list = [401] 
    name = "Test" 
    allowed_domains = ["xxx.xx.xx"] 
    start_urls = ["http://testdomain/test"] 

    auth = "Basic [Key Here]" 

    def parse(self, response): 
     return scrapy.Request(
      "http://testdomain/test", 
      headers={'Authorization': self.auth}, 
      callback=self.after_login 
     ) 

    def after_login(self, response): 
     self.log(response.body) 

Jetzt können Sie die Seite nach Authentifizierungsprozess kriechen.

Verwandte Themen