Logger på nettsteder med Python

Logger på nettsteder med Python
Innloggingsfunksjonen er en viktig funksjonalitet i dagens webapplikasjoner. Denne funksjonen hjelper med å holde spesielt innhold fra ikke-brukere på nettstedet og brukes også til å identifisere premiumbrukere også. Derfor hvis du har tenkt å skrape et nettsted, kan du komme over påloggingsfunksjonen hvis innholdet bare er tilgjengelig for registrerte brukere.

Tutorials for nettskraping har vært dekket i det siste, derfor dekker denne opplæringen bare aspektet ved å få tilgang til nettsteder ved å logge inn med kode i stedet for å gjøre det manuelt ved å bruke nettleseren.

For å forstå denne opplæringen og kunne skrive skript for å logge på nettsteder, trenger du litt forståelse av HTML. Kanskje ikke nok til å bygge fantastiske nettsteder, men nok til å forstå strukturen på en grunnleggende webside.

Installasjon

Dette ville bli gjort med forespørsler og Beautifules Python -biblioteker. Bortsett fra disse Python -bibliotekene, trenger du en god nettleser som Google Chrome eller Mozilla Firefox, da de ville være viktig for innledende analyse før du skriver kode.

Forespørslene og Beautifules -bibliotekene kan installeres med PIP -kommandoen fra terminalen som vist nedenfor:

PIP -installforespørsler
Pip installer BeautifulSoup4

For å bekrefte suksessen med installasjonen, aktiver Pythons interaktive skall som gjøres ved å skrive Python inn i terminalen.

Importer deretter begge bibliotekene:

Importer forespørsler
fra BS4 import BeautifulSoup

Importen er vellykket hvis det ikke er noen feil.

Prosessen

Logging på et nettsted med skript krever kunnskap om HTML og en ide om hvordan nettet fungerer. La oss kort se på hvordan nettet fungerer.

Nettsteder er laget av to hoveddeler, klientsiden og serversiden. Klientsiden er den delen av et nettsted som brukeren samhandler med, mens serversiden er den delen av nettstedet der forretningslogikk og andre serveroperasjoner, for eksempel å få tilgang til databasen blir utført.

Når du prøver å åpne et nettsted gjennom lenken, ber du en forespørsel til serversiden om å hente deg HTML-filene og andre statiske filer som CSS og JavaScript. Denne forespørselen er kjent som GET -forespørselen. Men når du fyller et skjema, laster opp en mediefil eller et dokument, oppretter et innlegg og klikker, la oss si en innsendingsknapp, sender du informasjon til serversiden. Denne forespørselen er kjent som innleggsforespørselen.

En forståelse av disse to konseptene ville være viktig når du skriver skriptet vårt.

Inspisere nettstedet

For å øve konseptene til denne artikkelen, vil vi bruke sitatene til å skrape nettsted.

Logging på nettsteder krever informasjon som brukernavn og et passord.

Men siden dette nettstedet nettopp brukes som et bevis på konsept, går alt. Derfor ville vi bruke admin som brukernavnet og 12345 som passord.

For det første er det viktig å se sidekilden, da dette vil gi en oversikt over strukturen på websiden. Dette kan gjøres ved å høyreklikke på websiden og klikke på "Vis sidekilde". Deretter inspiserer du påloggingsskjemaet. Du gjør dette ved å høyreklikke på en av påloggingsboksene og klikke inspisér element. På inspeksjonselementet, bør du se inngang Tagger og deretter en forelder form Merk et sted over det. Dette viser at pålogginger i utgangspunktet er former POSTed til serversiden av nettstedet.

Nå, legg merke til Navn Attributt til inndatakodene for brukernavn og passordbokser, de vil være nødvendig når du skriver koden. For dette nettstedet, Navn attributt for brukernavnet og passordet er Brukernavn og passord henholdsvis.

Deretter må vi vite om det er andre parametere som vil være viktige for innlogging. La oss raskt forklare dette. For å øke sikkerheten til nettsteder genereres vanligvis symboler for å forhindre at angrep på krysset forfalskninger.

Derfor, hvis disse symbolene ikke blir lagt til etter forespørselen, vil påloggingen mislykkes. Så hvordan vet vi om slike parametere?

Vi må bruke fanen Nettverk. For å få denne fanen på Google Chrome eller Mozilla Firefox, åpner du utviklerverktøyene og klikker på Network -fanen.

Når du er i nettverksfanen, kan du prøve å oppdatere den nåværende siden, og du vil merke forespørsler som kommer inn. Du bør prøve å passe på etter forespørsler som blir sendt inn når vi prøver å logge inn.

Her er hva vi vil gjøre videre, mens vi har nettverksfanen åpen. Sett inn påloggingsdetaljene og prøv å logge inn, den første forespørselen du vil se, bør være innleggsforespørselen.

Klikk på POST -forespørselen og se skjemaparametrene. Du vil merke at nettstedet har en csrf_token parameter med en verdi. Den verdien er en dynamisk verdi, derfor må vi fange opp slike verdier ved å bruke Be om først før du bruker POST be om.

For andre nettsteder du vil jobbe med, kan du sannsynligvis ikke se csrf_token Men det kan være andre symboler som genereres dynamisk. Over tid vil du bli flinkere til å kjenne parametrene som virkelig betyr noe for å gjøre et påloggingsforsøk.

Koden

For det første må vi bruke forespørsler og Beautifules for å få tilgang til sideinnholdet på påloggingssiden.

Fra forespørsler importøkt
Fra BS4 importerer BeautifulSoup som BS
med økt () som s:
Nettsted = s.få ("http: // sitater.Toscrape.com/innlogging ")
trykk (nettsted.innhold)

Dette vil skrive ut innholdet på påloggingssiden før vi logger inn, og hvis du søker etter "Logg inn" -nøkkelordet. Nøkkelordet vil bli funnet i sideinnholdet som viser at vi ennå ikke er logget inn.

Deretter ville vi søke etter csrf_token Nøkkelord som ble funnet som et av parametrene når du brukte nettverksfanen tidligere. Hvis nøkkelordet viser en kamp med en inngang Tag, så kan verdien trukket ut hver gang du kjører skriptet ved hjelp av Beautifulesuppe.

Fra forespørsler importøkt
Fra BS4 importerer BeautifulSoup som BS
med økt () som s:
Nettsted = s.få ("http: // sitater.Toscrape.com/innlogging ")
bs_content = bs (nettsted.Innhold, "HTML.parser ")
Token = BS_Content.finn ("input", "name": "csrf_token") ["verdi"]
login_data = "brukernavn": "admin", "passord": "12345", "csrf_token": token
s.Innlegg ("http: // sitater.Toscrape.com/login ", login_data)
home_page = s.få ("http: // sitater.Toscrape.com ")
print (home_page.innhold)

Dette vil skrive ut sideens innhold etter logging, og hvis du søker etter "Logout" -tnøkkelordet. Nøkkelordet vil bli funnet i sideinnholdet som viser at vi kunne logge inn.

La oss ta en titt på hver kodelinje.

Fra forespørsler importøkt
Fra BS4 importerer BeautifulSoup som BS

Kodelinjene ovenfor brukes til å importere sesjonsobjektet fra forespørselsbiblioteket og Beautiful -objektet fra BS4 -biblioteket ved hjelp av et alias av bs.

med økt () som s:

Forespørselsession brukes når du har tenkt å holde konteksten til en forespørsel, slik at informasjonskapsler og all informasjon i den forespørselsessionen kan lagres.

bs_content = bs (nettsted.Innhold, "HTML.parser ")
Token = BS_Content.finn ("input", "name": "csrf_token") ["verdi"]

Denne koden her bruker Beautiful -biblioteket slik at csrf_token kan hentes ut fra websiden og deretter tilordnes Token -variabelen. Du kan lære om å trekke ut data fra noder ved hjelp av BeautifulSoup.

login_data = "brukernavn": "admin", "passord": "12345", "csrf_token": token
s.Innlegg ("http: // sitater.Toscrape.com/login ", login_data)

Koden her oppretter en ordbok for parametrene som skal brukes til innlogging. Tastene til ordbøkene er Navn Attributter for inngangsmerkene og verdiene er verdi Attributter til inngangsmerkene.

De post Metoden brukes til å sende en postforespørsel med parametrene og logge oss inn.

home_page = s.få ("http: // sitater.Toscrape.com ")
print (home_page.innhold)

Etter en pålogging, henter disse kodelinjene ovenfor bare informasjonen fra siden for å vise at påloggingen var vellykket.

Konklusjon

Prosessen med å logge på nettsteder som bruker Python er ganske enkel, men konfigurasjonen av nettsteder er ikke de samme, derfor vil noen nettsteder vise seg å være vanskeligere å logge på enn andre. Det er mer som kan gjøres for å overvinne uansett hvilke innloggingsutfordringer du har.

Det viktigste i alt dette er kunnskapen om HTML, forespørsler, Beautifules og muligheten til å forstå informasjonen som er fått fra nettverksfanen i nettleserens utviklerverktøy.