Kaunis keitto-opetusohjelma: Web Scraping mit Python (2023)

2

Kaunis keitto-opetusohjelma: Web Scraping mit Python (1)

Internet tarjoaa käsittämättömän määrän dataa, joka soveltuu useille toiminta-alueille tutkimuksesta seuraavaan startup-ideaan. Jos haluamme käyttää näitä tietoja, meidän on ensin ladattava ne Internetistä käyttämällä menetelmää nimeltä web scraping. Python tarjoaa jo monia vaihtoehtoja verkkosivujen kaapimiseen useiden kirjastojensa kautta. Tämä opetusohjelma keskittyy pääasiassa Beautiful Soup -kirjastoon.

Python-kirjastotpyynnötja Beautiful Soup ovat tehokkaita työkaluja. Jos pidät käytännönläheisestä lähestymistavasta ja ehkä sinulla on jo perustiedot Python 3:sta (ja tarvittaessa HTML:stä), tämä opetusohjelma on sinua varten.

Tässä on mitä opit:

  1. käyttöpyynnötKirjasto ja kaunis keittoWeb-sivujen tietojen kaapiminen ja jäsentäminen
  2. Ymmärrä kaavinta A-Z:stä
  3. Luot Python-skriptin ladataksesi luettelon blogikirjoituksista LerneProgrammieren.de:stä

Jos olet suorittanut tämän projektin, sinulla on tietoa raaputtaaksesi mitä tahansa tietoa julkisilta verkkosivustoilta kaikkialla maailmassa.

Kuten aina, löydät tämän opetusohjelman koko lähdekoodin ilmaiselta jäsenalueeltamme.

Mennään!

Mitä on verkkoraapiminen?

AllaVerkkokaappaustai vain "kaappaus" tarkoitamme tietojen keräämistä Internetistä, enimmäkseen verkkosivustoilta. Teknisesti pelkkä Wikipedia-artikkelin merkitseminen, kopioiminen ja liittäminen on eräänlaista kaapimista.

Sana web scraping viittaa kuitenkin enimmäkseen automatisoituun prosessiin. Sinun pitäisi tietää etukäteen, että jotkut verkkosivustojen omistajat eivät pidä siitä, että heidän sivustonsa ylittävät automaattiset verkkokaapijat. Kannattaa siis aina kysyä sivuston ylläpitäjältä etukäteen tai etsiä tarkempia ohjeita, kuten käyttöehtoja, sivuilta. Sinun tulee aina selvittää kaikki muut verkkoraapimiseen liittyvät oikeudelliset näkökohdat asiantuntijan kanssa.

Rainakaavin edut ja käyttötarkoitukset

Oletetaan, että olet Koodaa-opetusohjelmiemme suuri fani. Mutta et aina halua tarkistaa manuaalisesti, onko uusi blogikirjoitus julkaistu. Sen sijaan päätät rakentaa Python-skriptin, joka tarkistaa LearnProgramming-blogista uusien viestien varalta tiettyinä aikoina (esim. 12 tunnin välein). Kun Python-ohjelmasi löytää uuden viestin, tämä blogiteksti luetaan (jäsennetään) automaattisesti web-kaappauksella ja tallennetaan pilviisi Word-tiedostona.

Pienellä koodin säätämisellä tämä automatisoitu prosessi voidaan ottaa käyttöön melkein missä tahansa blogissa, jota luet päivittäin.

Tai entä työpaikkailmoitussivusto, jos etsit vain uusia ohjelmointitöitä? Pythonilla voit automatisoida työnhaun tylsiä osia.

KuoleWeb-kaappausautomaatioon ratkaisu tiedonkeruun nopeuttamiseen. Kirjoitat koodisi kerran ja se hakee haluamasi tiedot yhä uudelleen ja uudelleen ja kaikilta koodissa määrittämiltäsi sivustoilta.

Sitä vastoin, jos yrität saada haluamasi tiedot manuaalisesti, saatat viettää paljon aikaa napsautukseen, vierittämiseen ja etsimiseen. Tämä pätee erityisesti silloin, kun tarvitset suuria tietomääriä verkkosivustoilta, joita päivitetään säännöllisesti uudella sisällöllä. Manuaalinen verkon kaapiminen voi viedä paljon aikaa.

Internetissä on niin paljon tietoa ja uutta tietoa tulee koko ajan. Mikä tahansa näistä tiedoista kiinnostaa sinua. Riippumatta siitä, oletko tällä hetkellä työnhakijana, haluatko ladata uusia blogikirjoituksia tietokoneellesi tai ehkä haluatko saada tietoa viimeisimmistä osakekursseista messengerin kautta, web-raapiminen voi auttaa sinua saavuttamaan tavoitteesi nopeasti ja tehokkaasti näissä käyttötilanteissa .

Web-kaappausongelmat

Jokainen verkkosivusto käyttää erilaista tekniikkaa ja muotoilua. Tämä voi aiheuttaa ongelmia verkon kaapimisessa. Siksi tämä monimuotoisuus on ongelma, koska jokaisella verkkosivustolla on erilainen rakenne ja koodi. Joten jokainen verkkosivusto tarvitsee erilaisen tai hieman muokatun Python-ohjelman tietojen poimimiseen.

Toinen haaste on verkkosivujen jatkuva kehittäminen ja muuttaminen. Tänään rakentamasi kaavin ei toimi samalla verkkosivustolla 6 kuukauden kuluttua, jos sivuston rakenne tai koodi on muuttunut. Hyvä uutinen on, että monet verkkosivustoihin tehdyt muutokset ovat melko pieniä, joten voit luultavasti päivittää kaavin vain pienin muutoksin.

Muista kuitenkin, että internet kehittyy jatkuvasti. Mitä enemmän kaapimia luot, sitä enemmän aikaa sinun on käytettävä huoltoon myöhemmin. Yksi tapa seurata näitä muutoksia on ottaa käyttöön jatkuva integraatio. Tämä testaa säännöllisesti kaavinkomentosarjasi. Heti kun virheitä ilmenee, sinulle ilmoitetaan, jotta voit tarkistaa ne ja tarvittaessa ylläpitää skriptiä jälkeenpäin.

Web Scraping vai API?

Jotkut verkkosivustojen tarjoajat tarjoavat tietojaan kotoa käsin, joko ilmaiseksi tai maksua vastaan. Nämä tarjosivatSovellusohjelmointirajapinnat (API)voit hakea heidän tietojaan ennalta määritetyllä tavalla.

Sovellusliittymien avulla voit välttää HTML:n jäsentämisen ja sen sijaan käyttää tietoja suoraan JSON- tai XML-muodoissa. HTML on ensisijaisesti tapa esittää sisältöä visuaalisesti käyttäjille.

Sovellusliittymää käytettäessä prosessi on yleensä vankempi kuin kaapiminen. Tämä johtuu siitä, että sovellusliittymät on suunniteltu erityisesti tietojen hakemista varten. API:n etuna on siis, että se toimii edelleen, vaikka sivuston ulkoasu tai rakenne muuttuisi paljon. Lisäksi API:n ylläpito on yleensä verkkosivuston tarjoajan vastuulla, et sinä! Tämä on valtava aikaetu.

On kuitenkin huomattava, että API:t voivat tietysti myös kehittyä ja muuttua. Et myöskään voi hallita API:n sisältämiä tietoja. Jos API ei tarjoa tietoja, jotka haluat purkaa, ainoat vaihtoehdot ovat kysyä hienosti API-palveluntarjoajalta tai kaapata puuttuvat tiedot verkossa.

Nämä olivat suurimmat erot verkkoraapimisen ja API:iden välillä. Tässä opetusohjelmassa käsittelemme vain verkon kaapimista, jotta emme ylitä soveltamisalaa. Jos olet kiinnostunut sovellusliittymistä, katso blogistamme lisää resursseja ja opetusohjelmia.

Projekti: blogitietojen kaavinta

Tässä Beautiful Soup -opetusohjelmassa rakennat verkkokaavin, joka poimii luettelon LerneProgrammieren.de:n blogikirjoituksista. Verkkokaapimesi hakee ja analysoi lähdekoodin suodattaakseen pois ladattavat tiedot.

Periaatteessa voit raaputtaa minkä tahansa Internetin sivun, jota voit tarkastella. Joillakin sivustoilla tiedon saaminen on erittäin helppoa, toisilla se on vaikeampaa.

Tämä opetusohjelma antaa sinulle yhdenJohdatus verkkoraapimiseen, jotta ymmärrät koko prosessin. Tämän jälkeen voit käyttää samaa prosessia jokaiselle verkkosivustolle, jonka haluat kaapia.

1. Etsi ja tarkasta verkkosivusto

Avaa sivu, jonka haluat kaapata oletusselaimellasi (Chrome, Firefox, Safarfi jne.)

Saadaksesi haluamasi tiedot, sinun on ymmärrettävä verkkosivuston rakenne.

Ryhdy tietojen etsiväksi

Napsauta sivustoa läpi. Käytä niitä kuten tavallinen vierailija.

Kaunis keitto-opetusohjelma: Web Scraping mit Python (2)

Yllä olevassa kuvakaappauksessa näemme LearnProgrammingin blogia. Näet luettelon joistakin blogikirjoituksista. Oikeassa sivupalkissa näemme hakupalkin ja joitain muita widgetejä. Jos napsautat jotakin viestiä, sisältö muuttuu (tietysti) samoin kuin URL-osoite selaimesi osoitepalkissa.

Parametrit: Ymmärrä URL-osoitteiden tiedot

URL-osoitteeseen voidaan koodata paljon tietoa. Web-kaappauksesta tulee paljon helpompaa, kun tutustut ensin URL-osoitteiden toimintaan ja siitä, mistä ne on tehty.

Käytä esimerkiksi hakukenttää. Kirjoita hakusana tähänHTMLa.

Kaunis keitto-opetusohjelma: Web Scraping mit Python (3)

URL-osoite muuttuu haun jälkeen seuraavasti:

Kaunis keitto-opetusohjelma: Web Scraping mit Python (4)

Voit jakaa yllä olevan URL-osoitteen kahteen pääosaan:

  1. Basis-URLedustaa verkkotunnuksia tai polkua, jolla olet. esim.lerneprogrammieren.de/
  2. GET-parametriedustavat lisäarvoja, jotka näkyvät lähes kaikilla verkkosivustoilla. Yllä olevassa esimerkissä on parametri?s=HTML

Jokaisella tällä sivustolla haemallasi alasivulla on sama perus-URL-osoite. GET-parametrit sen sijaan muuttuvat sen mukaan, mitä etsit. Voit ajatella niitä kyselymerkkijonoina, jotka lähetetään tietokantaan tiettyjen tietueiden hakemiseksi. Meidän tapauksessamme etsimme "HTML" ja saamme sitten vain blogitekstejä, jotka sisältävät hakusanan otsikossa tai tekstissä.

Ymmärrä GET-parametrit

GET-parametrit koostuvat yleensä kolmesta osasta:

  1. ?:Kyselyparametrit alkavat kysymysmerkillä (?) merkitty.
  2. Avainarvo-pari:Kyselyparametrin muodostavat tiedot esitetään avain-arvo-pareina. Nämä kaksi on yhdistetty yhtäläisyysmerkillä.
  3. & erotin (ei näy yllä olevassa esimerkissä):Jokaisella URL-osoitteella voi olla useita kyselyparametreja, jotka erotetaan et-merkillä (&)olla erillään toisistaan

Käytä uudelleen verkkosivustomme hakukenttää ja kirjoita tällä kertaa "JavaScript". Näet, että tällä kertaa näet erilaisia ​​viestejä. Myös selaimesi osoitepalkin parametrit ovat jälleen muuttuneet.

Yritä muuttaa hakuparametria suoraan osoitepalkistasi. Voit tehdä tämän poistamalla takana olevan arvon?s=ja antaaPythona. Paina sitten Enter ja odota, että sivu latautuu uudelleen.

Huomaat, että tämä manuaalinen parametrin arvon muutos on vaikuttanut näytettävien blogitekstien luetteloon. Tarkastelemalla URL-osoitteita saat tietoa kuinka noutaa tietoja verkkosivuston palvelimelta.

Tutki kehittäjätyökalujen verkkosivua

Seuraavaksi haluat oppia lisää siitä, kuinka tiedot rakennetaan lähdekoodin kautta. Sinun on ymmärrettävä sivun perusrakenne, jotta voit kerätä sen, mitä haluat poimia HTML-koodista. TheEntwickler-työkalutvoi auttaa sinua ymmärtämään verkkosivuston rakenteen.

Kaikkiin nykyaikaisiin selaimiin on asennettu kehittäjätyökalut. Tässä opetusohjelmassa näet kuinka työskentelet Chromen kehittäjätyökalujen kanssa. Näitä työkaluja voi käyttää hyvin samalla tavalla muissa selaimissa.

Chromessa pääset kehittäjän työkaluihin napsauttamalla sivua hiiren kakkospainikkeella. Napsauta sitten "Tarkista". Vaihtoehtoisesti voit käyttää pikanäppäintäCTRL + SHIFT + ILehdistö.

Käytämme kehittäjätyökaluja tutkiaksemme verkkosivuston DOM-mallia (Document Object Model). Tämä antaa meille mahdollisuuden ymmärtää paremmin lähdekoodia, jonka kanssa haluamme työskennellä.

Voit sukeltaa sivustosi DOM:iin valitsemalla välilehden nimeltäElementitkehittäjätyökaluissa. Näet rakenteen, jossa on klikattavia HTML-elementtejä. Voit lisätä, poistaa ja muokata kohteita suoraan selaimessasi:

Kaunis keitto-opetusohjelma: Web Scraping mit Python (5)

Nyt sinulta kysytään:Etsi minkä tahansa viestin otsikko DOM:sta. Mihin HTML-elementtiin otsikko on kääritty ja mitä muita HTML-elementtejä se sisältää?

Ota aikaa tähän vaiheeseen ja pelaa etsivää. Mitä enemmän tutustut sivustoon, sitä helpompi se on kaapia.

2. Kaavi HTML-sisältöä sivulta

Nyt kun olemme katsoneet sivua, on aika kirjoittaa Python-ohjelmamme.

Ensin sinun on siirrettävä sivun HTML-koodi Python-skriptiisi, jotta voit olla vuorovaikutuksessa sen kanssa. Tätä tehtävää varten käytät Pythonin Requests-kirjastoa. Jos et ole vielä asentanut sitä, voit kirjoittaa seuraavan haluamallesi komentoriville:

pip3-asennuspyynnöt

Avaa sitten uusi tiedosto suosikkitekstieditorissasi (esim. Visual Studio Code, Notepad++).

Tarvitset vain muutaman rivin Python-koodia saadaksesi HTML:n:

import requestsURL = 'https://lerneprogrammieren.de/?s=JavaScript' website = requests.get(URL)

Mitä täällä tapahtui?Tämä koodi tekee HTTP-pyynnön määritettyyn URL-osoitteeseen. Se hakee palvelimen takaisin lähettämät HTML-tiedot ja tallentaa ne Python-objektiin.

Jos katsot ladattua sisältöä, huomaat, että se näyttää hyvin samanlaiselta kuin aiemmin kehittäjätyökaluilla tarkastamasi HTML-koodi.

Se on kuitenkin aika hämmentävää konsolissa, eikö?

Voit parantaa päätelaitteen HTML-näytön rakennetta.content-Attributkohteen kanssaTulosta()viettää.

Staattiset sivustot

Sivusto, jonka haluat kaapia tässä opetusohjelmassa, näkyystaattista HTML-sisältöäklo. Täällä verkkopalvelin lähettää takaisin HTML-dokumentin, joka sisältää jo kaikki käyttäjänä näkemäsi tiedot.

Kun tarkastelit kehittäjätyökalujen sivua aiemmin, huomasit, että alla olevasta luettelosta löytyvä blogiteksti sisältää HTML-koodin.(sekava ja pitkä)koostuu:

54 span>

Ohjelmointikielten esittely (2022)

Tämä artikkeli on tarkoitettu antamaan sinulle yleiskuvan eri ohjelmointikielistä ja sen pitäisi näyttää, että ohjelmointikielet eivät itsessään ole niin erilaisia. Tässä lyhyesti esitellään ja selitetään yleisimmät ohjelmointikielet, jotka on otettu ns. TIOBE-indeksistä, joka mittaa ohjelmointikielten suosiota. Millä ohjelmointikielellä sinun kannattaa aloittaa, näkyy täällä [...]

Lue lisää a>

HTML-muotoilijan avulla voit muotoilla HTML-koodin, jotta se on helpompi ymmärtää.

Huomautus:Muista, että jokaisella verkkosivustolla on erilainen HTML-rakenne. Siksi sinun on tarkistettava ja ymmärrettävä käyttämäsi sivun rakenne. Sitten voit siirtyä seuraavaan vaiheeseen.

Yllä oleva HTML-koodi voidaan analysoida seuraavasti:

  1. Blogiviestin on luonut a
    tunniste CSS-luokassa"awr"mukana.
  2. Tämän jälkeen on linkki julkaisuun, erityisesti julkaisun kommenttiosiossa.
  3. Sitten näet toisen
    -tunniste, joka sisältää kuvan, eli esitellyn kuvan.
  4. Seuraavaksi tulee a

    tunniste, eli blogikirjoituksen otsikko. Toiseksi viimeinen päivä (

    -Tag) on ​​lyhyt ote artikkelin tekstistä.
  5. Lopuksi näytetään toinen linkki artikkeliin, jossa on linkkiteksti "Lue lisää".
  6. Jos joskus eksyt hämmentävään HTML-rakenteeseen, muista, että voit aina käyttää selaimesi kehittäjätyökaluja tarkistaaksesi rakenteen interaktiivisesti.

    Lyhyt päivitys:

    Sillä välin olet käyttänyt onnistuneestiPython-pyyntökirjastoteki töitä. Muutamalla koodirivillä oli mahdollista kaapata HTML-sisältöä verkosta ja tuoda se saataville jatkokäsittelyä varten.

    Kaavittaessa voi kuitenkin syntyä muutamia monimutkaisempia tilanteita. Siksi, ennen kuin alat käyttää Beautiful Soup -sovellusta saadaksesi tarvittavat tiedot juuri lataamastasi HTML-koodista, harkitse näitä kahta erityistilannetta:

    Erikoistapaus 1: kirjautumiset / piilotetut verkkosivustot

    Monet sivustot piiloutuvat sisäänkirjautumisen taakse. Joten ilman käyttäjätiliä emme voi saada tietoja, joita haluamme kaapata. HTTP-pyynnön tekeminen Python-skriptistä on erilainen kuin kirjautuminen verkkosivustolle selaimen kautta. Tämä tarkoittaa: Se, että voit kirjautua sisään Python-skriptillä, ei tarkoita, että voit myös käyttää hankittavia tietoja.

    On kuitenkin olemassa edistyneitä tekniikoita, joita voit käyttää pyyntökirjaston kautta päästäksesi sisään kirjautumisten takana olevaan sisältöön. Näiden tekniikoiden avulla voit kirjautua verkkosivustoille samalla kun teet HTTP-pyynnön komentosarjastasi.

    Erikoistapaus 2: Dynaamiset verkkosivustot

    Staattisia verkkosivustoja on helpompi muokata, koska palvelin lähettää sinulle vastauksena HTML-sivun. Tämä vastaus sisältää jo kaikki tiedot. Voit sitten jäsentää HTML-vastauksen Beautiful Soupilla ja alkaa kaivaa esiin kaikkia tarvitsemasi tietoja.

    Toisaalta voidynaamiset verkkosivustotHTML-koodia ei lähetetä takaisin palvelimelta. Sen sijaan saat vastauksena JavaScriptin. Selaimesi suorittaa ahkerasti palvelimelta takaisin saamansa JavaScript-koodin ja rakentaa DOM:n ja HTML:n puolestasi paikallisesti. Jos kuitenkin teet pyynnön dynaamiselle verkkosivulle Python-ohjelmassasi, et saa HTML-sivun sisältöä.

    Jos käytät pyyntökirjastoa, saat vastauksen vain palvelimelta. Dynaamisen verkkosivuston tapauksessa saat JavaScript-koodin, jota et voi jäsentää Beautiful Soupilla. Ainoa tapa päästä JavaScript-koodista kiinnostavaan sisältöön on koodin kauttatoteuttaa, aivan kuten selaimesi tekee. Requests-Bib ei voi tehdä sitä puolestasi, mutta on olemassa muita ratkaisuja, jotka voivat tehdä sen.

    Vaihtoehtoiset kirjastot dynaamisten sivujen kanssa työskentelemiseen:

    Esimerkiksi onrequests-htmlprojekti, joka auttaa sinua hahmottamaan JavaScript-koodia. Tämän kirjaston syntaksi on samanlainen kuin "normaalin" pyyntökirjaston.

    Toinen vaihtoehto dynaamisten verkkosivujen kaapimiseen ja jäsentämiseen on Selenium-kehys. Selenium emuloi todellista selainta, joka suorittaa JavaScript-koodin puolestasi ennen kuin se välittää renderoidun HTML-vastauksen komentosarjaasi.

    Jotta sisältöä ei räjähtäisi, emme käsittele näitä erityistilanteita tarkemmin tässä kaavinta-opetusohjelmassa. Toistaiseksi muutaman vaihtoehdon (kuten requests-html ja Selenium) tunteminen pitäisi riittää, jos olet jumissa pyyntökirjaston kanssa.

    3. HTML mit Beautiful Soup parsen

    Olet onnistuneesti kaavinnut HTML-koodin verkkosivulta. Mutta jotenkin meillä on silti melkoinen sotku.

    Koodissa on edelleen liikaa HTML-tageja ja attribuutteja. Haluamme siis tehdä tiedoista luettavampia ja valita, mikä meitä kiinnostaa.

    Voit käyttää Beautiful Soupia, toista Python-kirjastoa, jäsentämään jäsenneltyä dataa. Joten kirjaston avulla voit olla vuorovaikutuksessa HTML:n kanssa samalla tavalla kuin aiemmin interaktiivisten kehittäjätyökalujen kanssa.

    Beautiful Soup tarjoaa joukon intuitiivisia toimintoja, joita voit käyttää vastaanotetun HTML:n jäsentämiseen. Ennen kuin voimme aloittaa sen, meidän on ensin ladattava Beautiful Soup päätteen kautta:

    pip3 asenna beautifulsoup4

    Jos asennus onnistui, voit luoda uuden Python-tiedoston ja tuoda bs4-kirjaston sinne:

    tuontipyynnöt bs4:stä tuonti BeautifulSoupURL = 'https://lerneprogrammieren.de/blog/'website = requests.get(URL)results = BeautifulSoup(website.content, 'html.parser')

    Mitä tässä yksinkertaisessa käsikirjoituksessa tapahtuu?

    "Website"-muuttuja lähettää HTTP-pyynnön URL-osoitteeseen ja tallentaa HTML-sisällön.

    Viimeinen rivi muuttujalla "results" luo BeautifulSoup-objektin, joka ottaa HTML-sisällön syötteeksi. Lisäksi, kun objekti on instantoitu, kehotat Beautiful Soupia käyttämään sopivaa jäsentäjää. Yllä olevassa esimerkissä tämä on HTML-jäsennin.

    3.1 Etsi elementtejä HTML-luokan nimen mukaan

    Olet jo oppinut, että jokaisessa blogikirjoituksessa on /blog/-alisivulla

    -elementti, jonka luokka on "awr". Jäsentääksesi kaikki blogitekstit voit luoda uuden Beautiful Soup -objektin nimeltätuloksialuoda. Lopuksi tämän
    -elementin välissä ovat kaikki meitä kiinnostavat HTML-osat.

    Tältä se näyttää koodissa:

    blogbeitraege = results.find_all('div', class_='awr')

    Tässä kutsut menetelmää.find_all()kaunis keitto esine. Saat sitten takaisin kaikkien sivulla näytettyjen blogitekstien HTML-koodin.

    Voit lukea kaikki blogitekstit for-silmukalla:

    blogikirjoituksille blogikirjoituksissa: print(blogpost, end='\n'*2)

    Koodi näyttää paremmalta, mutta siinä on silti paljon HTML:ää.

    Oletetaan, että haluat vain poimia blogiartikkelin otsikon. Koska H2-tunnisteella on myös luokka, voimme helposti valita sisällön.

    Tässä on koodi:

    blogikirjoitukselle blogikirjoituksissa: blog_title = blog post.find('h2', class_='entry-title') print(blog_title)

    Lähtö:

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (6)

    Erinomainen! Tulet yhä lähemmäksi päivämääriä, joista olet todella kiinnostunut. Seuraavassa osiossa selitetään, kuinka tätä tulostetta rajataan näyttämättä HTML-elementtejä.

    3.2 Pura tekstiä HTML-elementeistä

    Tällä hetkellä haluat vain suodattaa blogitekstin otsikon ilman ylimääräisiä HTML-tageja. Beautiful Soupilla on jo ratkaisu sinulle. Sinä pystyt.tekstilisää Beautiful Soup -objektiin nähdäksesi vainTekstin sisältöpalautettavia HTML-elementtejä:

    blogikirjoitukselle blogikirjoituksissa: blog_title = blog post.find('h2', class_='entry-title') print(blog_title.text)

    Lähtö:

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (7)

    Suorita yllä oleva koodinpätkä ja näet tekstisisällön. Saat kuitenkin myös paljon tyhjää tilaa. Nyt kun työskentelet Python-merkkijonojen kanssa, voit käyttää ylimääräisiä välilyöntejä.strip()Poista. Voit myös käyttää muita suosittuja Python-merkkijonomenetelmiä tekstin puhdistamiseen.

    Huomautus:Verkko on kaoottinen, etkä voi luottaa siihen, että sivuston rakenne on johdonmukainen. Siksi kohtaat usein virheitä jäsennettäessäsi HTML-koodia. Jos suoritat yllä olevan koodin, voit tehdä seuraavanAttributeErrorvastaanottaa:

    AttributeError: NoneType-objektilla ei ole attribuuttia teksti

    Jos näin on, siirry taaksepäin ja tutki aiempia tuloksiasi. Oliko jotain arvokkaita kohteitaEi mitäänviettää?

    Voi olla, että mukana on erilainen elementti, joka eroaa hieman tavallisista blogikirjoituksista. Tässä opetusohjelmassa voit vain jättää huomioimatta virheen aiheuttavan elementin. Ohita HTML-elementtien jäsentäminen käyttämällä seuraavaa koodia:

    blogitekstissä olevalle blogikirjoitukselle: blog_title = blog post.find('h2', class_='entry-title') if Ei mitään in (blog_title): jatka print(blog_title.text)

    Kun olet muuttanut koodin yllä kuvatulla tavalla, suorita Python-skripti uudelleen. Sinun pitäisi nyt nähdä paljon enemmän viestien otsikoita.

    Tulos, jossa virheenkäsittely arvo "Ei mitään":

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (8)

    3.3 Etsi elementtejä luokan nimen ja tekstisisällön mukaan

    Sillä välin olet siivonnut näytetyt blogikirjoitukset suhteellisen hyvin. Vaikka se on melko siisti, voit tehdä käsikirjoituksestasi entistä hyödyllisemmän. Vaikka tämä on Python-opetusohjelma, olet kiinnostunut myös SQL-tietokannoista. Eikö olisi hyödyllistä, jos voisit suodattaa blogitekstit avainsanojen mukaan, esimerkiksi sisältäen vain tiettyjä merkkijonoja tai avainsanoja?

    Etsi merkkijonoja, joilla on tarkka haku:

    Tiedät jo, että sivuston viestien otsikot ovat sisällä

    Elementit

    näytetään. Voit suodattaa vain tietyn sisällönmerkkijono-argumenttikäyttää:

    sql_beitraege = tulokset.find_all('h2', string='SQL')

    Tämä koodi löytää kaiken

    -elementti

    , jossa sisältyvä merkkijono vastaa täsmälleen merkkijonoa "SQL". Huomaa, että voit käyttää menetelmää suoraan ensimmäisessätulosmuuttujatpuhelu Jos katsot yllä olevan koodinpätkän tulosta päätteessäsi, tulet pettymään, koska tulostetta ei palauteta.

    Yllä olevassa tulosteessa oli kaksi blogiviestiä, jotka sisälsivät avainsanan "SQL", joten miksi mitään ei näy?

    Jos sinämerkkijono=kuten teit yllä, Python-skriptisi etsiiTarkalleentämä merkkijono. Erot isoilla kirjaimilla tai välilyönnillä estävät kohteen löytämisen.

    Seuraavassa osiossa löydät tavan tehdä merkkijonosta yleisempää.

    Etsi merkkijonoja säännöllisen lausekkeen avulla:

    Jos haluat etsiä merkkijonoja, jotka sisältävät hakusanan, mutta et tiedä tarkkaa merkkijonoa, voit käyttää säännöllistä lauseketta. Huomautus: Ennen kuin voit käyttää säännöllistä lauseketta, sinun on tuotava "re"-kirjasto.

    Kirjoita seuraava koodi Python-ohjelman yläosaan:

    tuonti re

    Nyt kun olet tuonut säännöllisen lausekkeen kirjaston, olemme valmiita työskentelemään sen kanssa.

    Sinun on vaihdettava for-silmukkaa seuraavasti:

    blogikirjoituksille blogikirjoituksissa: sql_posts = blogipostaus(text=re.compile('SQL')) print(sql_posts)

    Lähtö:

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (9)

    Ohjelmasi löysi kaksi osumaa!

    Huomautus:Jos et vieläkään saa osumaa, yritä säätää hakumerkkijonoa. Koska blogitekstimme muuttuvat jatkuvasti, et ehkä löydä viestiä, jonka otsikossa on avainsana "SQL", kun käytät tätä opetusohjelmaa.

    Jotta pysyt järjestyksessä, tässä on kaikki koodi hakutermien etsimiseen säännöllisellä lausekkeella:

    tuontipyynnöt bs4:stä tuonti BeautifulSoupimport reURL = 'https://lerneprogrammieren.de/blog/' website = requests.get(URL) tulokset = BeautifulSoup(website.content, 'html.parser')blogbeitraege = results.findAll('h2 ', class_='entry-title')for blogbeitrag in blogbeitraege: sql_beitraege = blogbeitrag(text=re.compile('SQL')) print(sql_beitrage)

    3.4 Poimi attribuutit HTML-elementeistä

    Tässä vaiheessa Python-skriptisi on jo kaavinnut verkkosivuston ja suodattanut sen HTML-koodin sinua kiinnostavien osuvien otsikoiden mukaan.

    Vielä puuttuu linkki blogikirjoitukseen, jotta sitä voi katsoa myöhemmin, esim. selaimessa.

    Sivua tarkastellessasi huomasit, että myös artikkelilinkki on kääritty otsikon H2-tunnisteeseen. Poistimme kuitenkin linkin edellisistä esimerkeistä käyttämällä .text()- ja regex-funktioita.

    Tarvitset jonkin näistä linkkimääritteistä saadaksesi todellisen URL-osoitteenottaa talteen, sen sijaan että hylkäät sen.

    Katso blogitekstien luettelo uudelleen seuraavan koodin suorittamisen jälkeen:

    tuontipyynnöt bs4:stä tuonti BeautifulSoupURL = 'https://lerneprogrammieren.de/blog/' website = requests.get(URL) tulokset = BeautifulSoup(website.content, 'html.parser')blogbeitraege = results.findAll('h2' , class_='entry-title')for blogbeitrag in blogbeitraege: print(blogbeitrag)

    Lähtö:

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (10)

    URL-osoite on sisäkkäin href-attribuutissa- Tunnisteetsisältää. Siksi sinun tulee poimia href-attribuutin arvo. Teet sen seuraavasti:

    blogitekstissä olevalle blogikirjoitukselle: linkki = blogipostaus.find('a')['href'] print(link)

    Tulokset näyttävät vain linkit blogikirjoituksiin, jotka löytyvät H2-blogiotsikoiden väliltä.

    3.5 Etsi kohteita tunnuksella

    HTML-verkkosivulla jokaisella elementillä voi olla täsmälleen yksiAttribuuttimäärätä. Kuten nimestä voi päätellä, tämä tekeeAttribuuttielementti on yksilöllisesti tunnistettavissa sivulla. Voit aloittaa sivusi analysoinnin valitsemalla tietyn elementin sen tunnuksella.

    Palaa kehittäjätyökaluihin ja etsi verkkosivustoltamme (tai mistä tahansa) HTML-elementti, joka sisältää tunnuksen.

    Huomautus:Muista, että on hyödyllistä palata ajoittain selaimeesi, jotta voit tutkia sivustoa interaktiivisesti kehittäjätyökalujen avulla.

    Jos olet löytänyt HTML-elementin, joka sisältää id=""-attribuutin, voit testata Python-koodissa, voitko lukea sen.

    Beautiful Soup -sovelluksella löydät tietyn elementin sen tunnuksella seuraavasti:

    id_suchen = tulos.find(id='TUNNUSNIMI')

    Elementin tunnuksen avulla voit valita elementin muusta HTML:stä. Näin voit työskennellä vain tietyn HTML-osan kanssa sivulla.

    Muita kaapimisharjoituksia

    Jos kirjoitit koodin tämän opetusohjelman rinnalle, voit jo suorittaa skriptin sellaisenaan. Voit harjoitella uusia taitojasi toistamalla koko web-kaappausprosessin suosikkisivustoillasi.

    Tässä on joitain "raavittavia" inspiraatioita:

    • uutissivustot
    • Sosiaalisen median portaalit, kuten Reddit tai Twitter
    • Työportaali

    Käy opetusohjelma uudelleen alusta alkaen ja käytä jotakin näistä sivustoista. Näet, että kunkin verkkosivuston rakenne on erilainen, ja sinun on rakennettava koodi uudelleen hieman eri tavalla saadaksesi haluamasi tiedot.

    Tämä on myös paras tapa harjoitella juuri oppimiasi käsitteitä. Vaikka jumiutuisit joihinkin kohtiin, älä anna periksi. Pienellä sinnikkyydellä mikä tahansa verkkosivusto voidaan kaapia.

    Halutessasi voit myös kokeilla Beautiful Soupin lisäominaisuuksia. Käytä niitävirallinen dokumentaatiooppaana ja inspiraationa. Lisäharjoitus auttaa sinua oppimaan verkkokaappausta Pythonilla,pyynnötja hallitsemaan kauniin keiton paremmin.

    Johtopäätös verkon kaapimisen opetusohjelmassa Beautiful Soupin avulla

    Beautiful Soup on täynnä hyödyllisiä toimintoja HTML-tietojen jäsentämiseen. Se on luotettava ja avulias web-kaappauskumppani. Kun olet luonut ensimmäiset kaapimet, huomaat, että Beautiful Soup kattaa suurimman osan jäsennystarpeistasi navigoinnista tulosten tarkennettuun hakuun.

    Tässä opetusohjelmassa opit keräämään tietoja verkkosivuilta Pythonissa käyttämällä kirjastoja, kuten Requests ja Beautiful Soup. Olet luonut Python-skriptin, joka poimii blogitekstejä verkosta ja käy läpi koko web-kaappausprosessin alusta loppuun.

    Näiden työkalupakkisi kirjastoja koskevien tietojen avulla voit nyt mennä eteenpäin ja katsoa, ​​mitä muita verkkosivustoja voit kaapia! Pidä hauskaa, mutta muista käyttää taitojasi vastuullisesti.

    Jos haluat ladata tämän Beautiful Soup -opetusohjelman koko lähdekoodin, napsauta tästä.

    Jos haluat nähdä lisää kaavinta opetusohjelmia tai Python-opetusohjelmia, jätä kommentti tämän artikkelin alle.

    Python-oppimislaatikko aloittelijoille (ilmainen)

    Oppaat, lähdekoodi, cheatsheets ja resurssit Python-aloittelijoille

    Kaunis keitto-opetusohjelma: Web Scraping mit Python (11)

    (ikuisesti vapaa!)

References

Top Articles
Latest Posts
Article information

Author: Tuan Roob DDS

Last Updated: 10/31/2023

Views: 6560

Rating: 4.1 / 5 (42 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Tuan Roob DDS

Birthday: 1999-11-20

Address: Suite 592 642 Pfannerstill Island, South Keila, LA 74970-3076

Phone: +9617721773649

Job: Marketing Producer

Hobby: Skydiving, Flag Football, Knitting, Running, Lego building, Hunting, Juggling

Introduction: My name is Tuan Roob DDS, I am a friendly, good, energetic, faithful, fantastic, gentle, enchanting person who loves writing and wants to share my knowledge and understanding with you.