Kirjautuminen verkkosivustoille Pythonilla

Logging Into Websites With Python



Kirjautumisominaisuus on tärkeä toiminto nykypäivän verkkosovelluksissa. Tämä ominaisuus auttaa pitämään erityistä sisältöä sivuston käyttäjiltä, ​​ja sitä käytetään myös tunnistamaan premium-käyttäjät. Siksi, jos aiot raapia verkkosivuston, saatat kohdata kirjautumisominaisuuden, jos sisältö on vain rekisteröityneiden käyttäjien saatavilla.

Web -kaavintaoppaita on käsitelty aiemmin, joten tämä opetusohjelma kattaa vain verkkosivujen käyttöoikeuden kirjautumalla sisään koodilla sen sijaan, että teet sen manuaalisesti selaimen avulla.







Jos haluat ymmärtää tämän opetusohjelman ja pystyä kirjoittamaan komentosarjoja verkkosivustoille kirjautumiseen, tarvitset jonkin verran HTML -taitoa. Ehkä ei riitä mahtavien verkkosivustojen rakentamiseen, mutta tarpeeksi ymmärtääksesi perusverkkosivun rakenteen.



Tämä tehdään Requests- ja BeautifulSoup Python -kirjastojen avulla. Näiden Python -kirjastojen lisäksi tarvitset hyvän selaimen, kuten Google Chromen tai Mozilla Firefoxin, koska ne ovat tärkeitä alkuanalyysille ennen koodin kirjoittamista.



Requests- ja BeautifulSoup -kirjastot voidaan asentaa päätelaitteen pip -komennolla seuraavasti:





pip -asennuspyynnöt
pip asenna BeautifulSoup4

Vahvista asennuksen onnistuminen aktivoimalla Pythonin interaktiivinen kuori, joka tehdään kirjoittamalla python terminaaliin.

Tuo sitten molemmat kirjastot:



tuontipyynnöt
alkaenbs4tuontiKaunisKeitto

Tuonti onnistui, jos virheitä ei ole.

Prosessi

Sivustoille kirjautuminen komentosarjoilla edellyttää HTML -taitoa ja käsitystä siitä, miten verkko toimii. Katsotaanpa lyhyesti, miten verkko toimii.

Verkkosivustot koostuvat kahdesta pääosasta, asiakas- ja palvelinpuolelta. Asiakaspuoli on osa verkkosivustoa, jonka kanssa käyttäjä on vuorovaikutuksessa, kun taas palvelinpuoli on osa verkkosivustoa, jossa suoritetaan liiketoimintalogiikka ja muut palvelintoiminnot, kuten tietokannan käyttö.

Kun yrität avata verkkosivuston sen linkin kautta, pyydät palvelinpuolta hakemaan sinulle HTML-tiedostot ja muut staattiset tiedostot, kuten CSS ja JavaScript. Tämä pyyntö tunnetaan GET -pyynnönä. Kuitenkin, kun täytät lomaketta, lataat mediatiedoston tai asiakirjan, luot viestin ja napsautat sanomalla Lähetä -painiketta, lähetät tietoja palvelinpuolelle. Tämä pyyntö tunnetaan POST -pyynnönä.

Näiden kahden käsitteen ymmärtäminen olisi tärkeää käsikirjoitusta kirjoittaessamme.

Verkkosivuston tarkastus

Käytämme tämän artikkelin käsitteitä käytämme Lainaukset raaputtamaan verkkosivusto.

Verkkosivustoille kirjautuminen vaatii tietoja, kuten käyttäjätunnuksen ja salasanan.

Kuitenkin, koska tätä verkkosivustoa käytetään vain todisteena konseptista, kaikki menee. Siksi käyttäisimme admin käyttäjätunnuksena ja 12345 salasanaksi.

Ensinnäkin on tärkeää tarkastella sivun lähdettä, koska se antaisi yleiskuvan verkkosivun rakenteesta. Tämä voidaan tehdä napsauttamalla verkkosivua hiiren kakkospainikkeella ja napsauttamalla Näytä sivun lähde. Seuraavaksi tarkistat kirjautumislomakkeen. Voit tehdä tämän napsauttamalla hiiren kakkospainikkeella jotakin kirjautumisruutua ja napsauttamalla tarkastele elementtiä . Tarkastuselementissä sinun pitäisi nähdä tulo tunnisteet ja sitten vanhempi muodossa tunniste jossain sen yläpuolella. Tämä osoittaa, että kirjautumiset ovat pohjimmiltaan muotoja LÄHETTÄÄ sivuston palvelinpuolelle.

Huomaa nyt nimi käyttäjätunnus- ja salasanalaatikoiden syöttötunnisteiden attribuutti, niitä tarvitaan koodia kirjoitettaessa. Tätä verkkosivustoa varten nimi käyttäjätunnuksen ja salasanan määritteet ovat käyttäjätunnus ja Salasana vastaavasti.

Seuraavaksi meidän on tiedettävä, onko olemassa muita parametreja, jotka olisivat tärkeitä kirjautumisen yhteydessä. Selitetään tämä nopeasti. Verkkosivustojen turvallisuuden lisäämiseksi yleensä luodaan tunnuksia, jotka estävät sivustojen väliset väärentämishyökkäykset.

Siksi, jos näitä tunnuksia ei lisätä POST -pyyntöön, kirjautuminen epäonnistuu. Mistä sitten tiedämme tällaisista parametreista?

Meidän olisi käytettävä Verkko -välilehteä. Saat tämän välilehden Google Chromessa tai Mozilla Firefoxissa avaamalla kehittäjätyökalut ja napsauttamalla Verkko -välilehteä.

Kun olet verkko -välilehdellä, yritä päivittää nykyinen sivu ja huomaat saapuvia pyyntöjä. Yritä varoa, että POST -pyynnöt lähetetään, kun yritämme kirjautua sisään.

Näin toimisimme seuraavaksi Verkko -välilehden ollessa auki. Kirjoita kirjautumistiedot ja yritä kirjautua sisään, ensimmäisen näkemäsi pyynnön pitäisi olla POST -pyyntö.

Napsauta POST -pyyntöä ja katso lomakkeen parametrit. Huomaat, että verkkosivustolla on csrf_token parametri, jolla on arvo. Tämä arvo on dynaaminen arvo, joten meidän pitäisi kaapata tällaiset arvot käyttämällä SAADA pyydä ensin ennen LÄHETTÄÄ pyyntö.

Muilla sivustoilla, joilla työskentelet, et todennäköisesti näe csrf_token mutta voi olla muitakin tunnuksia, jotka luodaan dynaamisesti. Ajan myötä tiedät paremmin parametrit, joilla on todella merkitystä kirjautumisyrityksessä.

Koodi

Ensinnäkin meidän on käytettävä pyyntöjä ja BeautifulSoupia päästäksemme kirjautumissivun sivun sisältöön.

alkaenpyynnöttuontiIstunto
alkaenbs4tuontiKaunisKeittokutenbs

kanssaIstunto() kutens:
sivusto =s.saada('http://quotes.toscrape.com/login')
Tulosta(sivusto.sisältö)

Tämä tulostaisi kirjautumissivun sisällön ennen kuin kirjaudumme sisään ja jos etsit kirjautumisavainsanaa. Avainsana löytyy sivun sisällöstä, joka osoittaa, että emme ole vielä kirjautuneet sisään.

Seuraavaksi etsisimme csrf_token avainsana, joka löydettiin yhdeksi parametriksi käytettäessä verkko -välilehteä aiemmin. Jos avainsana näyttää osuman tulo -tunniste, arvo voidaan purkaa joka kerta, kun suoritat komentosarjan BeautifulSoupin avulla.

alkaenpyynnöttuontiIstunto
alkaenbs4tuontiKaunisKeittokutenbs

kanssaIstunto() kutens:
sivusto =s.saada('http://quotes.toscrape.com/login')
bs_content=bs(sivusto.sisältö, 'html.parser')
merkki =bs_content.löytö('syöttö', {'nimi':'csrf_token'})['arvo']
login_data= {'käyttäjätunnus':'admin','Salasana':'12345', 'csrf_token':merkki}
s.lähettää('http://quotes.toscrape.com/login',login_data)
etusivu_sivu=s.saada('http://quotes.toscrape.com')
Tulosta(etusivu_sivu.sisältö)

Tämä tulostaa sivun sisällön kirjautumisen jälkeen ja jos etsit Kirjaudu ulos -avainsanaa. Avainsana löytyy sivun sisällöstä, mikä osoittaa, että pystyimme kirjautumaan sisään.

Katsotaanpa jokaista koodiriviä.

alkaenpyynnöttuontiIstunto
alkaenbs4tuontiKaunisKeittokutenbs

Yllä olevia koodirivejä käytetään tuomaan istuntoobjekti pyyntökirjastoista ja BeautifulSoup -objekti bs4 -kirjastosta käyttämällä aliaksia bs .

kanssaIstunto() kutens:

Pyyntöistuntoa käytetään, kun aiot säilyttää pyynnön kontekstin, joten evästeet ja kaikki pyyntöistunnon tiedot voidaan tallentaa.

bs_content=bs(sivusto.sisältö, 'html.parser')
merkki =bs_content.löytö('syöttö', {'nimi':'csrf_token'})['arvo']

Tämä koodi käyttää tässä BeautifulSoup -kirjastoa, joten csrf_token voidaan poimia verkkosivulta ja määrittää sitten token -muuttujalle. Voit oppia tietojen poimimisesta solmuista BeautifulSoupin avulla.

login_data= {'käyttäjätunnus':'admin','Salasana':'12345', 'csrf_token':merkki}
s.lähettää('http://quotes.toscrape.com/login',login_data)

Koodi luo sanakirjan kirjautumiseen käytettävistä parametreista. Sanakirjojen avaimet ovat nimi syöttötunnisteiden attribuutit ja arvot ovat arvo syöttötunnisteiden määritteet.

The lähettää -menetelmää käytetään lähettämään postituspyyntö parametreineen ja kirjautumaan sisään.

etusivu_sivu=s.saada('http://quotes.toscrape.com')
Tulosta(etusivu_sivu.sisältö)

Kirjautumisen jälkeen nämä yllä olevat koodirivit vain poimivat tiedot sivulta osoittaakseen, että kirjautuminen onnistui.

Johtopäätös

Verkkosivustoille kirjautuminen Pythonin avulla on melko helppoa, mutta verkkosivustojen asennus ei ole sama, joten joillekin sivustoille kirjautuminen osoittautuu vaikeammaksi kuin toiset. Voit tehdä enemmän voittaaksesi kaikki kirjautumishaasteet.

Tärkeintä tässä kaikessa on HTML: n, pyyntöjen, BeautifulSoupin tuntemus ja kyky ymmärtää selaimesi kehittäjätyökalujen Verkko -välilehdeltä saadut tiedot.