Logge inn på nettsteder med Python

Logging Into Websites With Python



Påloggingsfunksjonen er en viktig funksjonalitet i dagens webapplikasjoner. Denne funksjonen hjelper til med å beholde spesielt innhold fra ikke-brukere av nettstedet, og brukes også til å identifisere premiumbrukere. Derfor, hvis du har tenkt å skrape et nettsted på nettet, kan du støte på påloggingsfunksjonen hvis innholdet bare er tilgjengelig for registrerte brukere.

Opplæringsprogrammer for nettskraping har blitt dekket tidligere, derfor dekker denne opplæringen bare aspektet ved å få tilgang til nettsteder ved å logge på 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 til en grunnleggende webside.



Dette vil bli gjort med Requests og BeautifulSoup Python -biblioteker. Bortsett fra de Python -bibliotekene, trenger du en god nettleser som Google Chrome eller Mozilla Firefox, da de ville være viktige for første analyse før du skriver kode.



Requests og BeautifulSoup -bibliotekene kan installeres med pip -kommandoen fra terminalen som vist nedenfor:





pip installasjonsforespørsler
pip installere BeautifulSoup4

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

Importer deretter begge bibliotekene:



importforespørsler
frabs4importVakker suppe

Importen lykkes hvis det ikke er noen feil.

Prosessen

Å logge 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 tilgang til databasen, utføres.

Når du prøver å åpne et nettsted via lenken, sender du en forespørsel til serversiden om å hente HTML-filene og andre statiske filer som CSS og JavaScript. Denne forespørselen er kjent som GET -forespørselen. Når du fyller ut et skjema, laster opp en mediefil eller et dokument, oppretter et innlegg og klikker la oss si en send -knapp, sender du imidlertid informasjon til serversiden. Denne forespørselen er kjent som POST -forespørselen.

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

Inspeksjon av nettstedet

For å praktisere konseptene i denne artikkelen, ville vi bruke Sitater å skrape nettsted.

Logging på nettsteder krever informasjon som brukernavn og passord.

Siden dette nettstedet bare brukes som et bevis på konseptet, går alt. Derfor ville vi brukt admin som brukernavn og 12345 som passord.

For det første er det viktig å se sidekilden, da dette vil gi en oversikt over strukturen på nettsiden. Dette kan gjøres ved å høyreklikke på nettsiden og klikke på Vis sidekilde. Deretter inspiserer du påloggingsskjemaet. Dette gjør du ved å høyreklikke på en av påloggingsboksene og klikke inspisér element . Når du inspiserer elementet, bør du se input tagger og deretter en forelder skjema tag et sted over det. Dette viser at pålogginger i utgangspunktet er former POST ed til serversiden av nettstedet.

Legg nå merke til Navn attributt for input -taggene for brukernavn og passord -boksene, ville de være nødvendige når du skriver koden. For dette nettstedet, Navn attributt for brukernavn og passord er brukernavn og passord henholdsvis.

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

Derfor, hvis disse tokenene ikke legges til POST -forespørselen, ville påloggingen mislykkes. Så hvordan vet vi om slike parametere?

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

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

Her er hva vi ville gjøre videre, mens vi hadde kategorien Nettverk åpen. Legg inn påloggingsdetaljene og prøv å logge deg på. Den første forespørselen du ser, bør være POST -forespørselen.

Klikk på POST -forespørselen og se skjemaparameterne. Du vil legge merke til at nettstedet har en csrf_token parameter med en verdi. Denne verdien er en dynamisk verdi, derfor må vi fange slike verdier ved hjelp av forespørsel først før du bruker POST be om.

For andre nettsteder du jobber med, ser du sannsynligvis ikke csrf_token men det kan være andre tokens som genereres dynamisk. Over tid ville du bli bedre til å kjenne til parametrene som virkelig betyr noe for å gjøre et påloggingsforsøk.

Koden

For det første må vi bruke Requests og BeautifulSoup for å få tilgang til sideinnholdet på påloggingssiden.

fraforespørslerimportØkt
frabs4importVakker suppesombs

medØkt() soms:
nettstedet =s.('http://quotes.toscrape.com/login')
skrive ut(nettstedet.innhold)

Dette vil skrive ut innholdet på påloggingssiden før vi logger inn og hvis du søker etter påloggingsnøkkelordet. Søkeordet vil bli funnet i sideinnholdet som viser at vi ennå ikke må logge inn.

Deretter ville vi søke etter csrf_token søkeord som ble funnet som en av parameterne ved bruk av nettverksfanen tidligere. Hvis søkeordet viser et treff med et input tag, kan verdien hentes ut hver gang du kjører skriptet med BeautifulSoup.

fraforespørslerimportØkt
frabs4importVakker suppesombs

medØkt() soms:
nettstedet =s.('http://quotes.toscrape.com/login')
bs_content=bs(nettstedet.innhold, 'html.parser')
token =bs_content.finne('input', {'Navn':'csrf_token'})['verdi']
login_data= {'brukernavn':'admin','passord':'12345', 'csrf_token':token}
s.post('http://quotes.toscrape.com/login',login_data)
hjemmesiden=s.('http://quotes.toscrape.com')
skrive ut(hjemmesiden.innhold)

Dette vil skrive ut sidens innhold etter at du har logget på, og hvis du søker etter Logout -søkeordet. Søkeordet vil bli funnet i sideinnholdet som viser at vi klarte å logge på.

La oss ta en titt på hver kodelinje.

fraforespørslerimportØkt
frabs4importVakker suppesombs

Kodelinjene ovenfor brukes til å importere sesjonsobjektet fra forespørselsbiblioteket og BeautifulSoup -objektet fra bs4 -biblioteket ved å bruke et alias av bs .

medØkt() soms:

Forespørselsøkt brukes når du har tenkt å beholde konteksten til en forespørsel, slik at informasjonskapslene og all informasjon fra forespørselsøkten kan lagres.

bs_content=bs(nettstedet.innhold, 'html.parser')
token =bs_content.finne('input', {'Navn':'csrf_token'})['verdi']

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

login_data= {'brukernavn':'admin','passord':'12345', 'csrf_token':token}
s.post('http://quotes.toscrape.com/login',login_data)

Koden her oppretter en ordbok med parametrene som skal brukes for pålogging. Nøklene til ordbøkene er Navn attributtene til inndatakodene og verdiene er verdi attributtene til inndatakodene.

De post metoden brukes til å sende en postforespørsel med parameterne og logge oss på.

hjemmesiden=s.('http://quotes.toscrape.com')
skrive ut(hjemmesiden.innhold)

Etter en pålogging trekker disse kodelinjene ovenfor ut informasjonen fra siden for å vise at påloggingen var vellykket.

Konklusjon

Prosessen med å logge på nettsteder ved hjelp av Python er ganske enkel, men oppsettet av nettsteder er ikke det samme, derfor vil noen nettsteder vise seg å være vanskeligere å logge på enn andre. Det er mer som kan gjøres for å overvinne de påloggingsutfordringene du har.

Det viktigste i alt dette er kunnskapen om HTML, forespørsler, BeautifulSoup og muligheten til å forstå informasjonen som er hentet fra kategorien Nettverk i nettleserens utviklerverktøy.