Asiaan vihkiytymättömälle saattaa kuulostaa erikoiselta että robotti voisi käydä nettisivuilla, ja osata hakea sieltä juuri sinulle olennaiset tiedot. Mistä robotti tietää mitä hakea?
Tässä kirjoituksessa käyn lyhyesti läpi erilaisia tapoja toteuttaa web scrapingia. Kyseessä ei missään nimessä ole kaiken kattava opas (näitä on netti pullollaan), vaan pieni tietoisku, jonka tarkoitus on selittää miksi web scraping yleensäkin toimii.
Nettisivut toteutetaan html-koodilla. Jos tutkailet jonkin nykyaikaisen sivuston lähdekoodia, näyttää se usein suurelta sekamelskalta. Jos sivustoa tarpeeksi yksinkertaistetaan, on koodi kuitenkin helppo ymmärtää. Pelkistetyn yksinkertaisen sivun html-koodi voisi olla vaikkapa seuraavanlainen:
<!DOCTYPE html>
<html>
<body>
<h1>Otsikkotaso 1</h1>
<h2>Otsikkotaso 2</h2>
<p>Ensimmäinen tekstipätkä</p>
<h2>Toinen otsikkotaso 2</h2>
<p>Toinen tekstipätkä ja linkki osoitteeseen <a href=”https://www.dataurakointi.fi”>Dataurakointi.fi</a></p>
</body>
</html>
HTML-koodi on järjestelty "tägien" (engl. tag) avulla. Esimerkiksi <p> -tägin sisällä on kappale, ja <h1> -tägin sisällä ykköstason otsikko. Tägit luovat sivustolle hierarkian, jonka avulla sivustosta voidaan tulkita tiettyjä osia tai kokonaisuuksia.
HTML-koodi saadaan käyttöön lataamalla sivu esimerkiksi pythonin
requests-kirjaston avulla. Vastaavasti tiedon hakuun sivulta voidaan käyttää
BeautifulSoup4 -kirjastoa. Esimerkkikoodistamme voitaisiin koodilla hakea esimerkiksi:
- Kaikki otsikot (esimerkissämme h1 ja h2)
- Kaikki tason 2 otsikot (h2)
- Kaikki tekstit, jotka ovat toisen tason 2 otsikon jälkeen
- Kaikki linkit, jotka voidaan avata ja hakea tiedot sieltä.
- jne.
Edellisestä lähestymistavasta seuraa ongelmia silloin, kun web-sivu luo osan sisällöstä javascriptin avulla. Tällöin käyttämällä requests-kirjastoa ei koko sivustoa saada käyttöön. Ongelma voidaan kiertää useallakin tavalla, joista yksi on käyttää Selenium-kirjastoa. Seleniumin avulla voidaan matkia nettiä selaavaa ihmistä, jolloin myös javascriptillä toteutettu koodi latautuu kokonaisuudessaan.
Javascriptillä saattaa olla toteutettu myös erilaisia listauksia, jotka on lajiteltu omille sivuilleen. Tällöin sivunvaihtolinkit eivät sisällä mitään webbiosoitteita, jotka voitaisiin avata tiedonhakua varten. Sen sijaan joudumme ohjelmallisesti klikkaamaan linkkiä, jotta saamme seuraavan sivun tiedot näkyviin.
Jotkut tiedot saattavat ilmestyä näkyviin, kun hiirtä pitää jonkin kohteen päällä. Seleniumilla voidaan ohjelmallisesti toteuttaa tällainenkin ratkaisu.
Käytännössä Selenium on itselleni se tapa, jolla saadaan haettua nekin datat, joihin ei muuten päästä käsiksi.
Javascriptillä toteutetut sivustot hakevat nettisivuilla esitettävät tiedot tietokannastaan erilaisilla kutsuilla. Kutsu palauttaa tietokannasta tarvittavat tiedot sivulle. Näitä kutsuja pystyy tutkimaan itse vaikkapa Firefox-selaimen Web developer toolsien avulla. Ajatuksena on toteuttaa kutsu itse samalla tavalla ohjelmallisesti, ja saada kutsun tiedot valmiiksi organisoidussa muodossa käyttöön.
Tämä on parhaimmillaan hyvin tehokas tapa hakea tietoa, mutta ei välttämättä aina onnistu.
Yllä olevien tekniikoiden kokeilu ja käyttö on parhaimmillaan mukavaa puuhaa. Voit kuitenkin jättää homman myös ammattilaiselle, joka valitsee jokaiseen käyttötarkoitukseen sopivan tekniikan.
Dataurakointi.fi tarjoaa automatisoidun tiedonhaun palveluja, muuttaen verkkosivuilta kerätyt tiedot selkeiksi
excel-taulukoiksi.
| Dataurakointi.fi