Pytonorm

Logga in på webbplatser med Python

Logga in på webbplatser med Python
Inloggningsfunktionen är en viktig funktion i dagens webbapplikationer. Denna funktion hjälper till att hålla speciellt innehåll från icke-användare av webbplatsen och används också för att identifiera premiumanvändare. Därför om du tänker skrapa en webbplats kan du stöta på inloggningsfunktionen om innehållet endast är tillgängligt för registrerade användare.

Självstudier om webbskrapning har täckts tidigare, därför täcker denna handledning bara aspekten av att få tillgång till webbplatser genom att logga in med kod istället för att göra det manuellt genom att använda webbläsaren.

För att förstå denna handledning och kunna skriva skript för inloggning på webbplatser, behöver du lite förståelse för HTML. Kanske inte tillräckligt för att bygga fantastiska webbplatser, men tillräckligt för att förstå strukturen på en grundläggande webbsida.

Installation

Detta skulle göras med Requests och BeautifulSoup Python-biblioteken. Bortsett från dessa Python-bibliotek, skulle du behöva en bra webbläsare som Google Chrome eller Mozilla Firefox, eftersom de skulle vara viktiga för inledande analys innan du skriver kod.

Requests and BeautifulSoup-biblioteken kan installeras med pip-kommandot från terminalen enligt nedan:

pipinstallationsförfrågningar
pip installera BeautifulSoup4

För att bekräfta installationens framgång aktiverar du Pythons interaktiva skal som görs genom att skriva pytonorm in i terminalen.

Importera sedan båda biblioteken:

importförfrågningar
från bs4 importera BeautifulSoup

Importen lyckades om det inte finns några fel.

Processen

Att logga in på en webbplats med skript kräver kunskap om HTML och en uppfattning om hur webben fungerar. Låt oss kort titta på hur webben fungerar.

Webbplatser består av två huvuddelar, klientsidan och serversidan. Klientsidan är den del av en webbplats som användaren interagerar med, medan serversidan är den del av webbplatsen där affärslogik och andra serveroperationer som att komma åt databasen körs.

När du försöker öppna en webbplats via dess länk gör du en begäran till serversidan för att hämta HTML-filer och andra statiska filer som CSS och JavaScript. Denna begäran kallas GET-begäran. Men när du fyller i ett formulär, laddar upp en mediefil eller ett dokument, skapar ett inlägg och klickar på låt oss säga en skicka-knapp skickar du information till serversidan. Denna begäran kallas POST-begäran.

Att förstå dessa två begrepp skulle vara viktigt när vi skriver vårt manus.

Inspektera webbplatsen

För att öva begreppen i den här artikeln använder vi webbplatsen Citat för att skrapa.

För att logga in på webbplatser krävs information som användarnamn och lösenord.

Men eftersom den här webbplatsen bara används som ett bevis på konceptet går allting. Därför skulle vi använda administration som användarnamn och 12345 som lösenord.

För det första är det viktigt att se sidkällan eftersom det ger en översikt över webbsidans struktur. Detta kan göras genom att högerklicka på webbsidan och klicka på "Visa sidkälla". Därefter inspekterar du inloggningsformuläret. Du gör detta genom att högerklicka på en av inloggningsrutorna och klicka inspektera elementet. På inspekteringselementet bör du se inmatning taggar och sedan en förälder form tagga någonstans ovanför den. Detta visar att inloggningar i princip är former POSTAredigeras till serversidan av webbplatsen.

Notera nu namn attributet för inmatningstaggarna för rutorna för användarnamn och lösenord, skulle de behövas när du skriver koden. För denna webbplats, namn attribut för användarnamnet och lösenordet är Användarnamn och Lösenord respektive.

Därefter måste vi veta om det finns andra parametrar som skulle vara viktiga för inloggning. Låt oss snabbt förklara detta. För att öka säkerheten på webbplatser genereras vanligtvis tokens för att förhindra attacker från flera sidor.

Därför, om dessa tokens inte läggs till i POST-begäran skulle inloggningen misslyckas. Så hur vet vi om sådana parametrar?

Vi skulle behöva använda fliken Nätverk. För att få den här fliken i Google Chrome eller Mozilla Firefox öppnar du utvecklarverktygen och klickar på fliken Nätverk.

När du är på nätverksfliken kan du försöka uppdatera den aktuella sidan och du kommer att märka att förfrågningar kommer in. Du bör försöka se upp för att POST-förfrågningar skickas in när vi försöker logga in.

Här är vad vi skulle göra nästa, medan fliken Nätverk är öppen. Lägg in inloggningsuppgifterna och försök att logga in, den första förfrågan som du ser skulle vara POST-begäran.

 

Klicka på POST-begäran och se formulärparametrarna. Du skulle märka att webbplatsen har en csrf_token parameter med ett värde. Det värdet är ett dynamiskt värde, därför skulle vi behöva fånga sådana värden med hjälp av SKAFFA SIG begär först innan du använder POSTA begäran.

För andra webbplatser du skulle arbeta med kanske du förmodligen inte ser csrf_token men det kan finnas andra token som genereras dynamiskt. Med tiden skulle du bli bättre på att känna till de parametrar som verkligen betyder för att göra ett inloggningsförsök.

Koden

För det första måste vi använda Requests och BeautifulSoup för att få tillgång till sidinnehållet på inloggningssidan.

från begäran om import session
från bs4 importera BeautifulSoup som bs
 
med Session () som s:
webbplats = s.get ("http: // offert.att skrapa.com / login ")
skriva ut (webbplats.innehåll)

Detta skulle skriva ut innehållet på inloggningssidan innan vi loggar in och om du söker efter nyckelordet "Login". Nyckelordet finns i sidinnehållet som visar att vi ännu inte loggar in.

Därefter skulle vi söka efter csrf_token nyckelord som hittades som en av parametrarna när du använde nätverksfliken tidigare. Om nyckelordet visar en matchning med en inmatning taggen, då kan värdet extraheras varje gång du kör skriptet med BeautifulSoup.

från begäran om import session
från bs4 importera BeautifulSoup som bs
 
med Session () som s:
webbplats = s.get ("http: // offert.att skrapa.com / login ")
bs_content = bs (webbplats.innehåll, "html.parser ")
token = bs_content.hitta ("input", "name": "csrf_token") ["värde"]
login_data = "användarnamn": "admin", "lösenord": "12345", "csrf_token": token
s.post ("http: // citat.att skrapa.com / login ", login_data)
home_page = s.get ("http: // offert.att skrapa.com ")
skriv ut (hemsida.innehåll)

Detta skriver ut sidans innehåll efter inloggning och om du söker efter nyckelordet "Logga ut". Nyckelordet finns i sidinnehållet och visar att vi lyckades logga in.

Låt oss ta en titt på varje kodrad.

från begäran om import session
från bs4 importera BeautifulSoup som bs

Kodraderna ovan används för att importera sessionsobjektet från förfrågningsbiblioteket och BeautifulSoup-objektet från bs4-biblioteket med ett alias av bs.

med Session () som s:

Begärningssession används när du tänker behålla sammanhanget för en begäran, så att cookies och all information från begärningssessionen kan lagras.

bs_content = bs (webbplats.innehåll, "html.parser ")
token = bs_content.hitta ("input", "name": "csrf_token") ["värde"]

Den här koden använder här BeautifulSoup-biblioteket så csrf_token kan extraheras från webbsidan och sedan tilldelas tokenvariabeln. Du kan lära dig att extrahera data från noder med hjälp av BeautifulSoup.

login_data = "användarnamn": "admin", "lösenord": "12345", "csrf_token": token
s.post ("http: // citat.att skrapa.com / login ", login_data)

Koden här skapar en ordlista över de parametrar som ska användas för inloggning. Nycklarna till ordböckerna är namn attributen för inmatningstaggarna och värdena är värde attributen för inmatningstaggarna.

De posta metoden används för att skicka en postförfrågan med parametrarna och logga in oss.

home_page = s.get ("http: // offert.att skrapa.com ")
skriv ut (hemsida.innehåll)

Efter en inloggning extraherar dessa kodrader ovan bara informationen från sidan för att visa att inloggningen lyckades.

Slutsats

Processen att logga in på webbplatser med Python är ganska enkel, men installationen av webbplatser är inte densamma, därför skulle vissa webbplatser visa sig vara svårare att logga in än andra. Det finns mer som kan göras för att övervinna alla inloggningsutmaningar du har.

Det viktigaste i allt detta är kunskapen om HTML, Requests, BeautifulSoup och förmågan att förstå informationen från fliken Network i din webbläsares utvecklarverktyg.

Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...
Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...
Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...