Python

Logge ind på websteder med Python

Logge ind på websteder med Python
Loginfunktionen er en vigtig funktionalitet i nutidens webapplikationer. Denne funktion hjælper med at holde specielt 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 komme på tværs af loginfunktionen, hvis indholdet kun er tilgængeligt for registrerede brugere.

Webskrabningstutorials er tidligere blevet dækket, derfor dækker denne tutorial 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 tutorial og være i stand til at skrive scripts til at logge ind på websteder, skal du have en vis forståelse af HTML. Måske ikke nok til at oprette fantastiske websteder, men nok til at forstå strukturen på en grundlæggende webside.

Installation

Dette ville ske med anmodningerne og BeautifulSoup Python-bibliotekerne. Bortset fra disse Python-biblioteker har du brug for en god browser som Google Chrome eller Mozilla Firefox, da de ville være vigtige for indledende analyse, før du skriver kode.

Requests 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 gøres ved at skrive python ind i terminalen.

Importér derefter begge biblioteker:

importanmodninger
fra bs4 import BeautifulSoup

Importen er vellykket, hvis der ikke er nogen 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 på, hvordan internettet fungerer.

Hjemmesider er lavet 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 serverhandlinger såsom adgang til databasen udføres.

Når du prøver at åbne et websted via dets link, anmoder du til serversiden om at hente HTML-filerne og andre statiske filer såsom CSS og JavaScript. Denne anmodning kaldes 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 sendeknap, sender du oplysninger til serversiden. Denne anmodning kaldes POST-anmodningen.

At forstå disse to begreber ville være vigtigt, når vi skriver vores script.

Inspektion af hjemmesiden

For at øve begreberne i denne artikel bruger vi webstedet Citater til at skrabe.

At logge ind på websteder kræver oplysninger som brugernavn og en adgangskode.

Men da dette websted bare bruges som et bevis på konceptet, går alting. Derfor bruger vi admin som brugernavn og 12345 som adgangskode.

For det første er det vigtigt at se sidekilden, da dette giver et overblik over strukturen på websiden. Dette kan gøres ved at højreklikke på websiden og klikke på "Vis sidekilde". Dernæst inspicerer du loginformularen. Du gør dette ved at højreklikke på et af loginfelterne og klikke inspicér element. Ved inspektion af element skal du se input tags og derefter en forælder form tag et eller andet sted over det. Dette viser, at logins grundlæggende er former for STOLPEredigeres til websiden på websitet.

Bemærk nu navn attribut for inputkoder til brugernavn og adgangskodefelter, ville de være nødvendige, når du skriver koden. For dette websted er 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 sikkerheden på websteder genereres tokens normalt for at forhindre Cross Site Forgery-angreb.

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

Vi bliver nødt til at 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 i netværksfanen, skal du prøve at opdatere den aktuelle side, og du vil bemærke, at anmodninger kommer ind. Du skal prøve at holde øje med POST-anmodninger, der sendes, når vi prøver at logge ind.

Her er hvad vi ville gøre næste, mens vi havde fanen Netværk åben. Indsæt loginoplysningerne, og prøv at logge ind, den første anmodning, du ser, skal 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 bliver vi nødt til at 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. Over tid vil 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.

fra anmodninger om import session
fra bs4 importerer BeautifulSoup som bs
 
med Session () som s:
site = s.get ("http: // tilbud.at skrabe.com / login ")
udskrive (site.indhold)

Dette vil udskrive indholdet af login-siden, før vi logger ind, og hvis du søger efter "Login" nøgleordet. Nøgleordet findes i sideindholdet, der viser, at vi endnu ikke skal logge ind.

Dernæst ville vi søge efter csrf_token nøgleord, der blev fundet som en af ​​parametrene, når du brugte netværksfanen tidligere. Hvis nøgleordet viser et match med et input tag, så kan værdien ekstraheres hver gang du kører scriptet ved hjælp af BeautifulSoup.

fra anmodninger om import session
fra bs4 importerer BeautifulSoup som bs
 
med Session () som s:
site = s.get ("http: // tilbud.at skrabe.com / login ")
bs_content = bs (websted.indhold, "html.parser ")
token = bs_indhold.find ("input", "name": "csrf_token") ["værdi"]
login_data = "brugernavn": "admin", "adgangskode": "12345", "csrf_token": token
s.post ("http: // citater.at skrabe.com / login ", login_data)
home_page = s.get ("http: // tilbud.at skrabe.com ")
udskrive (startside.indhold)

Dette vil udskrive sidens indhold efter login, og hvis du søger efter nøgleordet "Log ud". Nøgleordet findes i sideindholdet, der viser, at vi med succes kunne logge ind.

Lad os se på hver linje kode.

fra anmodninger om import session
fra bs4 importerer BeautifulSoup som bs

Ovennævnte kodelinjer bruges til at importere Session-objektet fra anmodningsbiblioteket og BeautifulSoup-objektet fra bs4-biblioteket ved hjælp af et alias af bs.

med Session () som s:

Anmodningssession bruges, når du har til hensigt at bevare konteksten for en anmodning, så cookies og al information fra denne anmodningssession kan lagres.

bs_content = bs (websted.indhold, "html.parser ")
token = bs_indhold.find ("input", "name": "csrf_token") ["værdi"]

Denne kode her bruger BeautifulSoup-biblioteket, så csrf_token kan udvindes 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": token
s.post ("http: // citater.at skrabe.com / login ", login_data)

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

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

home_page = s.get ("http: // tilbud.at skrabe.com ")
udskrive (startside.indhold)

Efter et login udtrækker disse kodelinjer ovenfor 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, derfor vil nogle sider vise sig sværere at logge 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, anmodninger, BeautifulSoup og evnen til at forstå de oplysninger, der er fået fra fanen Netværk i din webbrowsers udviklerværktøjer.

Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...
Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...
Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...