Log på websteder med Python

Logging Into Websites With Python



Loginfunktionen er en vigtig funktionalitet i nutidens webapplikationer. Denne funktion hjælper med at bevare særligt indhold fra ikke-brugere af webstedet og bruges også til at identificere premium-brugere. Derfor, hvis du har til hensigt at webskrabe et websted, kan du støde på login -funktionen, hvis indholdet kun er tilgængeligt for registrerede brugere.

Selvstudier til webskrabning er tidligere blevet dækket, derfor dækker denne vejledning kun aspektet ved at få adgang til websteder ved at logge ind med kode i stedet for at gøre det manuelt ved hjælp af browseren.







For at forstå denne vejledning og være i stand til at skrive scripts til at logge ind på websteder, har du brug for en vis forståelse af HTML. Måske ikke nok til at bygge fantastiske websteder, men nok til at forstå strukturen på en grundlæggende webside.



Dette ville blive gjort med Requests og BeautifulSoup Python -bibliotekerne. Udover disse Python -biblioteker har du brug for en god browser, f.eks. Google Chrome eller Mozilla Firefox, da de ville være vigtige for første analyse, før du skriver kode.



Anmodningerne og BeautifulSoup -bibliotekerne kan installeres med pip -kommandoen fra terminalen som vist nedenfor:





pip installationsanmodninger
pip installer BeautifulSoup4

For at bekræfte installationens succes skal du aktivere Pythons interaktive shell, som udføres ved at skrive python ind i terminalen.

Importer derefter begge biblioteker:



importereanmodninger
frabs4importereSmuk suppe

Importen lykkedes, hvis der ikke er fejl.

Processen

At logge ind på et websted med scripts kræver kendskab til HTML og en idé om, hvordan internettet fungerer. Lad os kort se nærmere på, hvordan internettet fungerer.

Websites består af to hoveddele, klientsiden og serversiden. Klientsiden er den del af et websted, som brugeren interagerer med, mens serversiden er den del af webstedet, hvor forretningslogik og andre serveroperationer såsom adgang til databasen udføres.

Når du prøver at åbne et websted via dets link, sender du en anmodning til serversiden om at hente HTML-filer og andre statiske filer, f.eks. CSS og JavaScript. Denne anmodning er kendt som GET -anmodningen. Men når du udfylder en formular, uploader en mediefil eller et dokument, opretter et indlæg og klikker på lad os sige en send -knap, sender du oplysninger til serversiden. Denne anmodning er kendt som POST -anmodningen.

Det er vigtigt at forstå disse to begreber, når vi skriver vores script.

Inspektion af webstedet

For at praktisere begreberne i denne artikel ville vi bruge Citater at skrabe internet side.

Logning på websteder kræver oplysninger som brugernavn og en adgangskode.

Men da dette websted bare bruges som et bevis på koncept, går alt. Derfor ville vi bruge admin som brugernavn og 12345 som adgangskode.

For det første er det vigtigt at se sidekilden, da dette ville give et overblik over webstedets struktur. Dette kan gøres ved at højreklikke på websiden og klikke på Vis sidekilde. Derefter inspicerer du loginformularen. Det gør du ved at højreklikke på en af ​​login -bokse og klikke inspicere element . Ved inspektion af element skal du se input tags og derefter en forælder form tag et sted over det. Dette viser, at logins grundlæggende er former, der er STOLPE ed til websiden på serversiden.

Bemærk nu navn attribut for input -tags til boksen brugernavn og adgangskode, ville de være nødvendige når koden skrives. For dette websted, navn attribut for brugernavnet og adgangskoden er brugernavn og adgangskode henholdsvis.

Dernæst skal vi vide, om der er andre parametre, der ville være vigtige for login. Lad os hurtigt forklare dette. For at øge hjemmesidernes sikkerhed genereres der normalt tokens for at forhindre Cross Site Forgery -angreb.

Derfor, hvis disse tokens ikke tilføjes til POST -anmodningen, ville login mislykkes. Så hvordan ved vi om sådanne parametre?

Vi skulle bruge fanen Netværk. For at få denne fane til Google Chrome eller Mozilla Firefox skal du åbne udviklerværktøjerne og klikke på fanen Netværk.

Når du er på netværksfanen, kan du prøve at opdatere den aktuelle side, og du vil bemærke, at der kommer anmodninger. Du bør prøve at passe på, at der sendes POST -anmodninger, når vi prøver at logge ind.

Her er, hvad vi ville gøre næste gang, mens vi havde fanen Netværk åben. Indtast loginoplysningerne, og prøv at logge ind, den første anmodning, du ville se, skulle være POST -anmodningen.

Klik på POST -anmodningen og se formularparametrene. Du vil bemærke, at webstedet har en csrf_token parameter med en værdi. Denne værdi er en dynamisk værdi, derfor skulle vi fange sådanne værdier ved hjælp af anmodning først, før du bruger STOLPE anmodning.

For andre websteder, du arbejder på, kan du muligvis ikke se csrf_token men der kan være andre tokens, der genereres dynamisk. Med tiden ville du blive bedre til at kende de parametre, der virkelig betyder noget for at lave et loginforsøg.

Koden

For det første skal vi bruge Requests og BeautifulSoup for at få adgang til sideindholdet på login -siden.

fraanmodningerimportereSession
frabs4importereSmuk suppesombs

medSession() soms:
websted =s.('http://quotes.toscrape.com/login')
Print(websted.indhold)

Dette ville udskrive indholdet på login -siden, før vi logger ind, og hvis du søger efter søgeordet Login. Søgeordet ville blive fundet i sideindholdet, der viser, at vi endnu ikke skal logge ind.

Dernæst ville vi søge efter csrf_token søgeord, der blev fundet som en af ​​parametrene, da du tidligere brugte fanen netværk. Hvis søgeordet viser et match med et input tag, så kan værdien udtrækkes hver gang du kører scriptet ved hjælp af BeautifulSoup.

fraanmodningerimportereSession
frabs4importereSmuk suppesombs

medSession() soms:
websted =s.('http://quotes.toscrape.com/login')
bs_indhold=bs(websted.indhold, 'html.parser')
polet =bs_indhold.Find('input', {'navn':'csrf_token'})['værdi']
login_data= {'brugernavn':'admin','adgangskode':'12345', 'csrf_token':polet}
s.stolpe('http://quotes.toscrape.com/login',login_data)
startside=s.('http://quotes.toscrape.com')
Print(startside.indhold)

Dette ville udskrive sidens indhold efter logning, og hvis du søger efter søgeordet Logout. Søgeordet ville blive fundet i sideindholdet, der viser, at vi var i stand til at logge ind.

Lad os se på hver kodelinje.

fraanmodningerimportereSession
frabs4importereSmuk suppesombs

Kodelinjerne ovenfor bruges til at importere Session -objektet fra forespørgselsbiblioteket og BeautifulSoup -objektet fra bs4 -biblioteket ved hjælp af et alias af bs .

medSession() soms:

Anmodningssession bruges, når du har til hensigt at beholde konteksten for en anmodning, så cookies og alle oplysninger fra denne anmodningssession kan gemmes.

bs_indhold=bs(websted.indhold, 'html.parser')
polet =bs_indhold.Find('input', {'navn':'csrf_token'})['værdi']

Denne kode her anvender BeautifulSoup -biblioteket, så csrf_token kan udtrækkes fra websiden og derefter tildeles tokenvariablen. Du kan lære om at udtrække data fra noder ved hjælp af BeautifulSoup.

login_data= {'brugernavn':'admin','adgangskode':'12345', 'csrf_token':polet}
s.stolpe('http://quotes.toscrape.com/login',login_data)

Koden her opretter en ordbog med de parametre, der skal bruges til at logge på. Ordbøgernes nøgler er navn attributterne for input -tags og værdierne er værdi attributter for input -tags.

Det stolpe metode bruges til at sende en postanmodning med parametrene og logge os ind.

startside=s.('http://quotes.toscrape.com')
Print(startside.indhold)

Efter et login ekstraherer disse kodelinjer simpelthen oplysningerne fra siden for at vise, at login var vellykket.

Konklusion

Processen med at logge ind på websteder ved hjælp af Python er ret let, men opsætningen af ​​websteder er ikke den samme, hvorfor nogle websteder ville vise sig vanskeligere at logge ind på end andre. Der er mere, der kan gøres for at overvinde de login -udfordringer, du har.

Det vigtigste i alt dette er kendskabet til HTML, forespørgsler, BeautifulSoup og evnen til at forstå de oplysninger, der er hentet fra fanen Netværk i din webbrowsers udviklerværktøjer.