Logga in på webbplatser med Python

Logging Into Websites With Python



Inloggningsfunktionen är en viktig funktion i dagens webbapplikationer. Denna funktion hjälper till att behålla särskilt 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 på webben, kan du stöta på inloggningsfunktionen om innehållet bara är tillgängligt för registrerade användare.

Webbskrapningsprogram har tidigare täckts, 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 med hjälp av webbläsaren.







För att förstå denna handledning och kunna skriva skript för att logga in 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.



Detta skulle göras med Requests och BeautifulSoup Python -biblioteken. Förutom de Python -biblioteken behöver du en bra webbläsare som Google Chrome eller Mozilla Firefox eftersom de skulle vara viktiga för inledande analys innan du skriver kod.



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





pip -installationsförfrågningar
pip installera BeautifulSoup4

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

Importera sedan båda biblioteken:



importeraförfrågningar
frånbs4importeraVacker soppa

Importen lyckas om det inte finns några fel.

Processen

Logga in på en webbplats med skript kräver kunskap om HTML och en uppfattning om hur webben fungerar. Låt oss kort undersöka 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 till exempel åtkomst till databasen körs.

När du försöker öppna en webbplats via dess länk, begär du till serversidan om 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.

Inspekterar webbplatsen

För att öva begreppen i den här artikeln skulle vi använda Citat att skrapa hemsida.

Logga in på webbplatser kräver information som användarnamn och lösenord.

Men eftersom denna webbplats bara används som ett bevis på konceptet går allt. 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 detta skulle ge en överblick ö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. Det gör du genom att högerklicka på en av inloggningsrutorna och klicka inspektera elementet . När du inspekterar elementet bör du se inmatning taggar och sedan en förälder form tag någonstans ovanför den. Detta visar att inloggningar i grunden är former som är POSTA ed till serversidan av webbplatsen.

Observera nu namn attribut 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 webbplatsernas säkerhet genereras vanligtvis tokens för att förhindra attacker mot förfalskning på flera platser.

Därför skulle inloggningen misslyckas om dessa tokens inte läggs till i POST -begäran. 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, öppna utvecklarverktygen och klicka 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 gång vi hade fliken Nätverk öppen. Ange inloggningsuppgifterna och försök att logga in, den första förfrågan du skulle se bör 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 SKAFFA SIG begär först innan du använder POSTA begäran.

För andra webbplatser du skulle arbeta med kanske du inte ser csrf_token men det kan finnas andra tokens som genereras dynamiskt. Med tiden skulle du bli bättre på att känna till de parametrar som verkligen spelar roll 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å åtkomst till sidinnehållet på inloggningssidan.

frånförfrågningarimporteraSession
frånbs4importeraVacker soppasombs

medSession() soms:
webbplats =s.skaffa sig('http://quotes.toscrape.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 inloggningsordet. Nyckelordet finns i sidinnehållet som visar att vi ännu inte har loggat in.

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

frånförfrågningarimporteraSession
frånbs4importeraVacker soppasombs

medSession() soms:
webbplats =s.skaffa sig('http://quotes.toscrape.com/login')
bs_content=bs(webbplats.innehåll, 'html.parser')
tecken =bs_content.hitta('inmatning', {'namn':'csrf_token'})['värde']
login_data= {'Användarnamn':'administration','Lösenord':'12345', 'csrf_token':tecken}
s.posta('http://quotes.toscrape.com/login',login_data)
hemsida=s.skaffa sig('http://quotes.toscrape.com')
skriva ut(hemsida.innehåll)

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

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

frånförfrågningarimporteraSession
frånbs4importeraVacker soppasombs

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

medSession() soms:

Förfrågningssession används när du tänker behålla sammanhanget för en begäran, så att kakorna och all information från den förfrågningssessionen kan lagras.

bs_content=bs(webbplats.innehåll, 'html.parser')
tecken =bs_content.hitta('inmatning', {'namn':'csrf_token'})['värde']

Denna kod här använder 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':'administration','Lösenord':'12345', 'csrf_token':tecken}
s.posta('http://quotes.toscrape.com/login',login_data)

Koden här skapar en ordbok med parametrar som ska användas för inloggning. Ordlistornas nycklar är namn attributen för inmatningstaggarna och värdena är värde attribut för inmatningstaggarna.

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

hemsida=s.skaffa sig('http://quotes.toscrape.com')
skriva ut(hemsida.innehåll)

Efter en inloggning extraherar dessa kodrader ovan enkelt 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 kan vissa webbplatser visa sig 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, förfrågningar, BeautifulSoup och förmågan att förstå informationen från fliken Nätverk i din webbläsares utvecklarverktyg.