Inloggen op websites met Python

Logging Into Websites With Python



De inlogfunctie is een belangrijke functionaliteit in de hedendaagse webapplicaties. Deze functie helpt speciale inhoud van niet-gebruikers van de site te behouden en wordt ook gebruikt om premium gebruikers te identificeren. Daarom, als u van plan bent een website op het web te schrapen, kunt u de inlogfunctie tegenkomen als de inhoud alleen beschikbaar is voor geregistreerde gebruikers.

Webscraping-tutorials zijn in het verleden behandeld, daarom behandelt deze tutorial alleen het aspect van het verkrijgen van toegang tot websites door in te loggen met code in plaats van dit handmatig te doen met behulp van de browser.







Om deze tutorial te begrijpen en scripts te kunnen schrijven om in te loggen op websites, heb je enige kennis van HTML nodig. Misschien niet genoeg om geweldige websites te bouwen, maar genoeg om de structuur van een eenvoudige webpagina te begrijpen.



Dit zou gedaan worden met de Requests en BeautifulSoup Python-bibliotheken. Afgezien van die Python-bibliotheken, hebt u een goede browser nodig, zoals Google Chrome of Mozilla Firefox, omdat deze belangrijk zijn voor de eerste analyse voordat u code schrijft.



De Requests en BeautifulSoup-bibliotheken kunnen worden geïnstalleerd met het pip-commando vanaf de terminal, zoals hieronder te zien is:





pip installatieverzoeken
pip installeer BeautifulSoup4

Om het succes van de installatie te bevestigen, activeer je de interactieve shell van Python door te typen Python in de terminal.

Importeer vervolgens beide bibliotheken:



importerenverzoeken
vanbs4importerenMooiSoep

De import is geslaagd als er geen fouten zijn.

Het proces

Inloggen op een website met scripts vereist kennis van HTML en een idee van hoe het web werkt. Laten we eens kijken hoe het web werkt.

Websites bestaan ​​uit twee hoofdonderdelen, de client-side en de server-side. De clientzijde is het deel van een website waarmee de gebruiker interactie heeft, terwijl de serverzijde het deel van de website is waar bedrijfslogica en andere serverbewerkingen zoals toegang tot de database worden uitgevoerd.

Wanneer u een website probeert te openen via de link, vraagt ​​u aan de serverzijde om de HTML-bestanden en andere statische bestanden zoals CSS en JavaScript op te halen. Dit verzoek staat bekend als het GET-verzoek. Wanneer u echter een formulier invult, een mediabestand of een document uploadt, een bericht maakt en bijvoorbeeld op een verzendknop klikt, verzendt u informatie naar de server. Dit verzoek staat bekend als het POST-verzoek.

Een begrip van deze twee concepten zou belangrijk zijn bij het schrijven van ons script.

De website inspecteren

Om de concepten van dit artikel te oefenen, zouden we de Citaten om te schrapen website.

Inloggen op websites vereist informatie zoals de gebruikersnaam en een wachtwoord.

Maar aangezien deze website alleen als proof of concept wordt gebruikt, is alles mogelijk. Daarom zouden we gebruiken beheerder als de gebruikersnaam en 12345 als het wachtwoord.

Ten eerste is het belangrijk om de paginabron te bekijken, omdat dit een overzicht geeft van de structuur van de webpagina. Dit kunt u doen door met de rechtermuisknop op de webpagina te klikken en vervolgens op Paginabron weergeven te klikken. Vervolgens bekijkt u het inlogformulier. Dit doe je door met de rechtermuisknop op een van de inlogvakken te klikken en op . te klikken inspecteer element . Bij het inspecteren van het element zou je moeten zien: invoer tags en dan een ouder formulier tag ergens erboven. Dit laat zien dat logins in feite formulieren zijn die NA naar de server-side van de website gestuurd.

Let nu op de naam attribuut van de invoertags voor de gebruikersnaam- en wachtwoordvakken, zouden ze nodig zijn bij het schrijven van de code. Voor deze website is de naam attribuut voor de gebruikersnaam en het wachtwoord zijn gebruikersnaam en wachtwoord respectievelijk.

Vervolgens moeten we weten of er andere parameters zijn die belangrijk zijn voor het inloggen. Laten we dit snel uitleggen. Om de beveiliging van websites te vergroten, worden meestal tokens gegenereerd om Cross Site Forgery-aanvallen te voorkomen.

Daarom, als die tokens niet worden toegevoegd aan het POST-verzoek, mislukt de aanmelding. Dus hoe weten we over dergelijke parameters?

We zouden het tabblad Netwerk moeten gebruiken. Om dit tabblad in Google Chrome of Mozilla Firefox te krijgen, opent u de Developer Tools en klikt u op het tabblad Netwerk.

Als je eenmaal op het netwerktabblad bent, probeer dan de huidige pagina te vernieuwen en je zou merken dat er verzoeken binnenkomen. Je moet proberen op te passen voor POST-verzoeken die worden verzonden wanneer we proberen in te loggen.

Dit is wat we nu zouden doen, terwijl we het tabblad Netwerk open hebben staan. Voer de inloggegevens in en probeer in te loggen, het eerste verzoek dat u zou zien, zou het POST-verzoek moeten zijn.

Klik op het POST-verzoek en bekijk de formulierparameters. Je zou merken dat de website een csrf_token parameter met een waarde. Die waarde is een dynamische waarde, daarom zouden we dergelijke waarden moeten vastleggen met behulp van de KRIJGEN eerst aanvragen voordat u de NA verzoek.

Voor andere websites waaraan u zou werken, ziet u waarschijnlijk de csrf_token maar er kunnen andere tokens zijn die dynamisch worden gegenereerd. In de loop van de tijd zou u beter de parameters leren kennen die er echt toe doen bij het doen van een inlogpoging.

De code

Ten eerste moeten we Requests en BeautifulSoup gebruiken om toegang te krijgen tot de pagina-inhoud van de inlogpagina.

vanverzoekenimporterenSessie
vanbs4importerenMooiSoepalsbs

metSessie() alss:
website =s.krijgen('http://quotes.toscrape.com/login')
afdrukken(website.inhoud)

Dit zou de inhoud van de inlogpagina afdrukken voordat we inloggen en als u zoekt op het Login-sleutelwoord. Het trefwoord zou worden gevonden in de pagina-inhoud, waaruit blijkt dat we nog moeten inloggen.

Vervolgens zouden we zoeken naar de csrf_token trefwoord dat eerder als een van de parameters werd gevonden bij het gebruik van het netwerktabblad. Als het trefwoord een overeenkomst toont met een invoer tag, dan kan de waarde elke keer dat u het script uitvoert met BeautifulSoup worden geëxtraheerd.

vanverzoekenimporterenSessie
vanbs4importerenMooiSoepalsbs

metSessie() alss:
website =s.krijgen('http://quotes.toscrape.com/login')
bs_content=bs(website.inhoud, 'html.parser')
token =bs_content.vind('invoer', {'naam':'csrf_token'})['waarde']
login_data= {'gebruikersnaam':'beheerder','wachtwoord':'12345', 'csrf_token':token}
s.na('http://quotes.toscrape.com/login',login_data)
Startpagina=s.krijgen('http://quotes.toscrape.com')
afdrukken(Startpagina.inhoud)

Hiermee wordt de inhoud van de pagina afgedrukt nadat u zich hebt aangemeld en als u op het trefwoord Uitloggen zoekt. Het trefwoord zou worden gevonden in de pagina-inhoud, waaruit blijkt dat we met succes konden inloggen.

Laten we eens kijken naar elke regel code.

vanverzoekenimporterenSessie
vanbs4importerenMooiSoepalsbs

De bovenstaande regels code worden gebruikt om het Session-object uit de request-bibliotheek en het BeautifulSoup-object uit de bs4-bibliotheek te importeren met een alias van bs .

metSessie() alss:

Verzoeksessie wordt gebruikt wanneer u van plan bent de context van een verzoek te behouden, zodat de cookies en alle informatie van die verzoeksessie kunnen worden opgeslagen.

bs_content=bs(website.inhoud, 'html.parser')
token =bs_content.vind('invoer', {'naam':'csrf_token'})['waarde']

Deze code hier maakt gebruik van de BeautifulSoup-bibliotheek, dus de csrf_token kan van de webpagina worden geëxtraheerd en vervolgens worden toegewezen aan de tokenvariabele. U kunt meer leren over het extraheren van gegevens uit knooppunten met BeautifulSoup.

login_data= {'gebruikersnaam':'beheerder','wachtwoord':'12345', 'csrf_token':token}
s.na('http://quotes.toscrape.com/login',login_data)

De code hier creëert een woordenboek van de parameters die moeten worden gebruikt om in te loggen. De sleutels van de woordenboeken zijn de naam attributen van de invoertags en de waarden zijn de waarde attributen van de invoertags.

De na methode wordt gebruikt om een ​​postverzoek met de parameters te verzenden en ons in te loggen.

Startpagina=s.krijgen('http://quotes.toscrape.com')
afdrukken(Startpagina.inhoud)

Na een login extraheren deze coderegels eenvoudig de informatie van de pagina om aan te tonen dat de login succesvol was.

Conclusie

Het inloggen op websites met Python is vrij eenvoudig, maar de opzet van websites is niet hetzelfde, daarom zouden sommige sites moeilijker in te loggen zijn dan andere. Er is meer dat kan worden gedaan om de login-uitdagingen die je hebt te overwinnen.

Het belangrijkste bij dit alles is de kennis van HTML, Requests, BeautifulSoup en de mogelijkheid om de informatie te begrijpen die is verkregen via het tabblad Netwerk van de ontwikkelaarstools van uw webbrowser.