Conectarea la site-uri web cu Python

Logging Into Websites With Python



Funcția de conectare este o funcționalitate importantă în aplicațiile web de astăzi. Această caracteristică ajută la păstrarea conținutului special de la utilizatorii site-ului și este, de asemenea, utilizată pentru a identifica și utilizatorii premium. Prin urmare, dacă intenționați să scrapați un site web, puteți întâlni funcția de conectare dacă conținutul este disponibil numai pentru utilizatorii înregistrați.

Tutorialele de web scraping au fost acoperite în trecut, prin urmare, acest tutorial acoperă doar aspectul accesului la site-uri web prin conectarea cu cod în loc să o faceți manual folosind browserul.







Pentru a înțelege acest tutorial și pentru a putea scrie scripturi pentru conectarea la site-uri web, ar trebui să înțelegeți HTML. Poate nu suficient pentru a construi site-uri web minunate, dar suficient pentru a înțelege structura unei pagini web de bază.



Acest lucru s-ar face cu bibliotecile de Cereri și BeautifulSoup Python. În afară de aceste biblioteci Python, veți avea nevoie de un browser bun, cum ar fi Google Chrome sau Mozilla Firefox, deoarece acestea ar fi importante pentru analiza inițială înainte de a scrie cod.



Bibliotecile Solicitări și BeautifulSoup pot fi instalate cu comanda pip de la terminal așa cum se vede mai jos:





solicitări de instalare pip
pip instalează BeautifulSoup4

Pentru a confirma succesul instalării, activați shell-ul interactiv Python, care se face prin tastare piton în terminal.

Apoi importați ambele biblioteci:



importsolicitări
dinBS4importBeautifulSoup

Importul are succes dacă nu există erori.

Procesul

Conectarea la un site web cu scripturi necesită cunoștințe de HTML și o idee despre modul în care funcționează webul. Să analizăm pe scurt modul în care funcționează webul.

Site-urile web sunt formate din două părți principale, partea client și partea server. Partea client este partea unui site web cu care utilizatorul interacționează, în timp ce partea server este partea site-ului web în care se execută logica de afaceri și alte operațiuni ale serverului, cum ar fi accesarea bazei de date.

Când încercați să deschideți un site web prin link-ul acestuia, faceți o cerere către partea serverului pentru a vă prelua fișierele HTML și alte fișiere statice, cum ar fi CSS și JavaScript. Această cerere este cunoscută sub numele de cerere GET. Cu toate acestea, atunci când completați un formular, încărcați un fișier media sau un document, creați o postare și dați clic pe să spunem un buton de trimitere, trimiteți informații către server. Această cerere este cunoscută sub numele de cerere POST.

Înțelegerea acestor două concepte ar fi importantă atunci când ne scriem scenariul.

Inspectarea site-ului web

Pentru a exersa conceptele acestui articol, vom folosi Citate pentru a răzuie site-ul web.

Conectarea la site-uri web necesită informații precum numele de utilizator și o parolă.

Cu toate acestea, deoarece acest site web este folosit doar ca o dovadă a conceptului, orice merge. Prin urmare, am folosi admin ca nume de utilizator și 12345 ca parolă.

În primul rând, este important să vizualizați sursa paginii, deoarece aceasta ar oferi o imagine de ansamblu asupra structurii paginii web. Acest lucru se poate face făcând clic dreapta pe pagina web și făcând clic pe Vizualizarea sursei paginii. Apoi, inspectați formularul de conectare. Faceți acest lucru făcând clic dreapta pe una dintre casetele de autentificare și făcând clic pe inspectează elementul . La inspectarea elementului, ar trebui să vedeți intrare etichete și apoi un părinte formă etichetați undeva deasupra acestuia. Acest lucru arată că autentificările sunt practic forme care sunt POST în partea de server a site-ului web.

Acum, rețineți Nume atributul etichetelor de intrare pentru casetele de nume de utilizator și parolă, acestea ar fi necesare la scrierea codului. Pentru acest site web, Nume atributul pentru numele de utilizator și parola sunt nume de utilizator și parola respectiv.

În continuare, trebuie să știm dacă există alți parametri care ar fi importanți pentru autentificare. Să explicăm rapid acest lucru. Pentru a spori securitatea site-urilor web, jetoanele sunt de obicei generate pentru a preveni atacurile Cross Site Forgery.

Prin urmare, dacă aceste jetoane nu sunt adăugate la cererea POST, atunci autentificarea ar eșua. Deci, de unde știm despre astfel de parametri?

Ar trebui să folosim fila Rețea. Pentru a obține această filă pe Google Chrome sau Mozilla Firefox, deschideți Instrumentele pentru dezvoltatori și faceți clic pe fila Rețea.

Odată ce vă aflați în fila de rețea, încercați să reîmprospătați pagina curentă și veți observa că vin solicitări. Ar trebui să încercați să fiți atenți la trimiterea cererilor POST atunci când încercăm să vă conectați.

Iată ce am face în continuare, în timp ce avem fila Rețea deschisă. Introduceți datele de conectare și încercați să vă conectați, prima cerere pe care ați vedea-o ar trebui să fie solicitarea POST.

Faceți clic pe solicitarea POST și vizualizați parametrii formularului. Ați observa că site-ul web are un csrf_token parametru cu o valoare. Această valoare este o valoare dinamică, de aceea ar trebui să captăm astfel de valori folosind OBȚINE solicitați mai întâi înainte de a utiliza fișierul POST cerere.

Pentru alte site-uri web la care ați lucra, este posibil să nu vedeți csrf_token dar pot exista și alte jetoane care sunt generate dinamic. De-a lungul timpului, ați cunoaște mai bine parametrii care contează cu adevărat în încercarea de conectare.

Codul

În primul rând, trebuie să folosim Solicitări și BeautifulSoup pentru a avea acces la conținutul paginii din pagina de autentificare.

dinsolicităriimportSesiune
dinBS4importBeautifulSoupla fel debs

cuSesiune() la fel des:
site =s.obține(„http://quotes.toscrape.com/login”)
imprimare(site.conţinut)

Aceasta va imprima conținutul paginii de autentificare înainte de a ne autentifica și dacă căutați cuvântul cheie Autentificare. Cuvântul cheie ar fi găsit în conținutul paginii, arătând că încă nu ne-am conectat.

Apoi, am căuta csrf_token cuvânt cheie care a fost găsit ca unul dintre parametri când ați utilizat fila de rețea mai devreme. Dacă cuvântul cheie arată o potrivire cu un intrare tag, atunci valoarea poate fi extrasă de fiecare dată când rulați scriptul folosind BeautifulSoup.

dinsolicităriimportSesiune
dinBS4importBeautifulSoupla fel debs

cuSesiune() la fel des:
site =s.obține(„http://quotes.toscrape.com/login”)
bs_content=bs(site.conţinut, „html.parser”)
jeton =bs_content.găsi('intrare', {'Nume':„csrf_token”})['valoare']
date_conectare= {'nume de utilizator':„administrator”,'parola':„12345”, „csrf_token”:jeton}
s.post(„http://quotes.toscrape.com/login”,date_conectare)
pagina principala=s.obține(„http://quotes.toscrape.com”)
imprimare(pagina principala.conţinut)

Aceasta va imprima conținutul paginii după conectare și dacă căutați cuvântul cheie Deconectare. Cuvântul cheie va fi găsit în conținutul paginii, arătând că am putut să ne conectăm cu succes.

Să aruncăm o privire la fiecare linie de cod.

dinsolicităriimportSesiune
dinBS4importBeautifulSoupla fel debs

Liniile de cod de mai sus sunt folosite pentru a importa obiectul Session din biblioteca de solicitări și obiectul BeautifulSoup din biblioteca bs4 folosind un alias de bs .

cuSesiune() la fel des:

Sesiunea de solicitări este utilizată atunci când intenționați să păstrați contextul unei cereri, astfel încât cookie-urile și toate informațiile sesiunii de solicitare pot fi stocate.

bs_content=bs(site.conţinut, „html.parser”)
jeton =bs_content.găsi('intrare', {'Nume':„csrf_token”})['valoare']

Acest cod utilizează aici biblioteca BeautifulSoup, astfel încât csrf_token poate fi extras din pagina web și apoi atribuit variabilei token. Puteți afla despre extragerea datelor din noduri folosind BeautifulSoup.

date_conectare= {'nume de utilizator':„administrator”,'parola':„12345”, „csrf_token”:jeton}
s.post(„http://quotes.toscrape.com/login”,date_conectare)

Codul de aici creează un dicționar cu parametrii care vor fi utilizați pentru logare. Cheile dicționarelor sunt Nume atributele etichetelor de intrare și valorile sunt valoare atributele etichetelor de intrare.

The post metoda este utilizată pentru a trimite o cerere de postare cu parametrii și pentru a ne conecta.

pagina principala=s.obține(„http://quotes.toscrape.com”)
imprimare(pagina principala.conţinut)

După o autentificare, aceste linii de cod de mai sus extrag pur și simplu informațiile din pagină pentru a arăta că autentificarea a avut succes.

Concluzie

Procesul de conectare la site-uri web folosind Python este destul de ușor, cu toate acestea configurarea site-urilor web nu este aceeași, prin urmare, unele site-uri s-ar dovedi mai dificil de conectat decât altele. Se pot face mai multe pentru a depăși orice provocări de conectare aveți.

Cel mai important lucru în toate acestea este cunoașterea HTML, Solicitări, BeautifulSoup și capacitatea de a înțelege informațiile obținute din fila Rețea a instrumentelor pentru dezvoltatori ale browserului dvs. web.