Skip to content

Latest commit

 

History

History
132 lines (85 loc) · 6.67 KB

vaje-2023-12-14.md

File metadata and controls

132 lines (85 loc) · 6.67 KB

Priprava baze in pridobivanje podatkov

Priprava okolja in nameščanje paketov

Če bomo v projektu uporabljali pakete, ki niso del standardne Pythonove knjižnice, je treba pakete namestiti. Najpogostejši način za upravljanje s paketi je z uporabo virtualnih okolij in nameščevalnika paketov pip, ki bosta na kratko opisana v naslednjih razdelkih.

Virtualno okolje

Pripravimo virtualno razvojno okolje (angl. virtual environment) venv, ki omogoča boljšo kontrolo nad nameščenimi paketi, ki so specifični za posamezne projekte.

Odpremo ukazno lupino v korenskem imeniku projekta (angl. project root). Ustvarimo virtualno okolje z ukazom:

python3 -m venv <ime_okolja>

kjer <ime_okolja> zamenjamo z želenim imenom okolja. Ponavadi se uporablja kar venv, a ni zares pomembno. Ko smo ustvarili okolje, ga aktiviramo.

Windows:

.\<ime_okolja>\Scripts\activate

Linux/MacOS:

source <ime_okolja>/bin/activate

Če smo ukaze uspešno izvedli, se bo pred pozivom (angl. prompt) v ukazni lupini prikazalo ime virtualnega okolja:

(venv) C:\Users\Uporabnik\Documents\podatkovne-baze1>

V aktivirano okolje lahko sedaj namestimo pakete, ki jih želimo namestiti.

Če želimo kodo zaganjati s pomočjo VS Code (in ne direktno iz ukazne lupine), moramo urejevalniku VS Code povedati, kateri interpreter naj uporabi ob zagonu. Z bližnjico Ctrl + Shift + P odpremo okno za ukaze. Poiščemo možnost Python: Select Interpreter:

slika

Če smo virtualno okolje namestili v korenski imenik projekta, bo VS Code verjetno že sam predlagal, kateri interpreter lahko izberemo (v tem primeru je to ta z imenom venv, ki se nahaja v projektu):

slika

V nasprotnem primeru bo treba interpreter poiskati na roke (to bo odvisno od posameznega sistema).

Namestitev paketov

Pakete namestimo z uporabo nameščvalnika pip (ta lepo sodeluje z virtualnimi okolji venv).

pip install <ime_paketa1> <ime_paketa2> <ime_paketa3> ...

Če smo se odločili, da ne bomo uporabljali virtualnih okolij, bo morda potrebno povedati, katero verzijo Pythona želimo uporabiti (na sistemu je lahko hkrati nameščenih več verzij Pythona) - ponavadi bo imela ime python3, če je več verzij bo lahko ime tudi oblike npr. python3.10:

python3 -m pip install <ime_paketa1> <ime_paketa2> <ime_paketa3> ...

Priprava repozitorija

Nekaj nasvetov, kako pripraviti repozitorij.

Readme.md

V repozitorij ponavadi vključimo datoteko Readme.md, v kateri na kratko opišemo projekt in navodila za vzpostavitev projekta (kaj mora uporabnik storiti, da projekt vzpostavi na svojem računalniku). Vključimo lahko tudi slike (npr. ER diagram baze), primere uporabe, ...

Če projekt zahteva pakete, ki niso del standardne knjižnice v jeziku Python, jih navedemo za lažjo vzpostavitev projekta. Lahko jih zapišemo tudi v besedilno datoteko (npr. requirements.txt), ki jo nato uporabnik lahko zažene z ukazom pip install -r requirements.txt in s tem enostavno namesti vse zahtevane pakete. To je sploh uporabno, kadar gre za večji projekt z večjim številom paketov.

Primer:

bottle
beautifulsoup4
requests

Datoteke, izključene iz sistema za verzioniranje (npr. git)

V gitu ponavadi ne vključujemo:

  • datotek in imenikov, ki zasedejo veliko prostora (npr. podatkovna baza) in niso nujni za delovanje projekta (jih lahko poustvarimo programsko)
  • datotek, ki so vezani na določen računalnik (npr. virtualno okolje, .vscode, ...)
  • datotek, ki vsebujejo občutljive podatke (npr. gesla, osebni podatki)

V ta namen v repozitoriju ustvarimo datoteko z imenom .gitignore. Najlažje je, če datoteko ustvarimo kar na GitHubu, ki že vsebuje predloge za izbrane programske jezike. Lahko pa datoteko ustvarimo tudi ročno. V datoteki navedemo imena ali poti do datotek in imenikov (oziroma vzorce), ki jih želimo izključeti iz beleženja verzij. Datoteka z vsebino

.vscode
venv
*.jpg
podatki/*.sqlite
nastavitve/skrivnost.txt

iz verzioniranja izključi:

  • podimenik .vscode, ki vsebuje nastavitve urejevalnika kode VS code
  • podimenik venv, ki vsebuje virtualno okolje
  • vse datoteke (slike) s končnico .jpg
  • datoteke s končnico sqlite, ki se nahajajo v podimeniku podatki
  • datoteko skrivnost.txt v podimeniku nastavitve

Pridobivanje podatkov s spleta

Če želimo podatke pridobiti s spleta, lahko prenesemo html kodo z uporabo knjižnice requests:

Z requests.get nato pošljemo zahtevo za prenos HTML kode spletne strani:

import requests

odgovor = requests.get("https://www.legendww.me/zenska-odjeca")

V tem primeru je odgovor objekt tipa Response, ki vsebuje lastnosti content in status_code. odgovor.status_code nam pove, kako se je strežnik odzval na naš zahtevek - če je koda enaka 200, smo s strani uspešno pridobili odgovor in bo v odgovor.content shranjena HTML koda spletne strani. Kode, oblike 4xx (napaka na strani uporabnika) in 5xx (napaka na strani strežnika) pomenijo, da je bilo pridobivanje neuspešno. Nekaj pogostih neuspešnih odzivov:

  • 400 (Bad request) - Napačno strukturirana poizvedba
  • 401 (Unauthorized) - Stran zahteva prijavo za ogled vsebine
  • 403 (Forbidden) - Nimamo pravic za ogled vsebine
  • 404 (Not found) - Stran, ki jo iščemo, ne obstaja (morda smo narobe strukturirali url?)
  • 418 (I'm a teapot) - Prvoaprilska šala - ok, tega verjetno ne bomo srečali, če se ne bomo res zelo potrudili (npr. https://www.google.com/teapot)
  • 429 (Too many requests) - v kratkem času ste na spletno stran poslali preveč zahtevkov.

Preden se lotimo razčlenjevanja HTML, si v brskalniku oglejmo kodo spletne strani oziroma elementov, ki nas zanimajo (na primer: ime izdelka, cena, ...). Kakšna je struktura strani? Lahko identificiramo HTML značke, s pomočjo katerih bomo prišli do želenih podatkov? Preproste spletne strani lahko obdelamo kar z regularnimi izrazi (v Pythonu za to uporabimo paket re, ki je del standardne namestitve Pythona). Za zahtevnejše spletne strani lahko uporabimo BeautifulSoup, ki ustvari objekt za lažje premikanje in iskanje po kodi HTML. Če se naši podatki nahajajo v tabeli, nam morda lahko pomaga celo paket pandas, ki je namenjen delu s tabelami in omogoč enostaven izvoz podatkov v datoteke.

Za primer enostavne skripte, ki s spletne strani pridobi podatke in jih s pomočjo BeautifulSoup izvozi v datoteko tipa csv (comma separated values), si oglej datoteko pridobi_podatke.py

Uvoz podatkov iz csv v bazo

Glej datoteko baza.py.