Recent Changes - Search:

Oktatás

* Programozás 1
  + feladatsor
  + GitHub oldal

* Szkriptnyelvek
  + feladatsor
  + quick link

Teaching

* Programming 1 (BI)
  ◇ exercises
  ◇ quick link

* Scripting Languages
  ◇ exercises
  ◇ quick link

teaching assets


Félévek

* aktuális (2023/24/2)
* archívum


Linkek

* kalendárium
   - munkaszüneti napok '20
* tételsorok
* jegyzetek
* szakdolgozat / PhD
* ösztöndíjak
* certificates
* C lang.
* C++
* C#
* Clojure
* D lang.
* Java
* Nim
* Scala


[ edit | logout ]
[ sandbox | passwd ]

Py3 /

20121126a

/r/EarthPorn

A reddit-en van egy /r/EarthPorn nevű szál (subreddit), ahova a felhasználók szebbnél-szebb tájképeket szoktak feltölteni.

Erről a weboldalról töltsük le a nagyfelbontású képeket a saját gépünkre. Ez lehet egy későbbi háttérkép cserélő alkalmazás alapja :)

Naiv megközelítés

A képek URL-jei ott vannak a HTML forrásban. Vagyis letölthetnénk a HTML forrást, majd abból reguláris kifejezések segítségével ki tudnánk szedni a képek linkjeit. Nem egy elegáns megoldás. Mivel a HTML kódok nagyon gyakran nem szabályosak (hiányzik egy záró-tag, az attribútum nincs idézőjelek között, stb.), ezért nagyon nehéz olyan reg. kifejezést írni, ami minden lehetőséggel számol.

Haladó megközelítés

Azonban HTML oldalakból adatok kinyerésére nem ajánlják a reguláris kifejezéseket. Ennek oka az, hogy a HTML oldalak többsége nem szabályos HTML. Az attribútumok nem mindegyike van idézőjelek között, hiányoznak a záró tag-ek, stb. Amikor a böngésző letölt egy HTML oldalt, akkor javítja a hibák nagy részét, majd felépít egy DOM struktúrát, majd ezt a DOM struktúrát járja be és jeleníti meg a weboldalt.

Vagyis ha HTML oldalakból akarunk adatot kiszedni, akkor használjuk pl. a BeautifulSoup könyvtárat, ami szintén egy DOM hierarchiát épít, s abban kell navigálni.

Kevésbé fájdalmas megközelítés

Mielőtt azonban nekiesnénk egy HTML oldalnak, érdemes megnézni, hogy az adott oldal nem érhető-e el valamilyen más, a gép számára olvashatóbb formátumban. A reddit-en gondoltak erre is, s minden egyes oldal elérhető XML-ben is. Ehhez egyszerűen csak a "/.xml"-t kell az URL végére beszúrni: http://www.reddit.com/r/earthporn/.xml.

Na de XML-t olvasni nem a legkellemesebb mulatság. Ilyenkor kell feltenni a következő kérdést: JSON-ban nem érhető el ugyanez?

Fájdalommentes megközelítés

Óriási mákunk van, a reddit-en erre is gondoltak: http://www.reddit.com/r/earthporn/.json. Mentsük le ezt a JSON forrást egy fájlba (pl. earthporn.json). Jelenleg a forrás nincs tagolva, az egész egy sorban helyezkedik el. A következő módszerrel tudjuk olvashatóbbá tenni a file tartalmát: "cat earthporn.json | python -m json.tool →szep.json".

Lépések:

  • A JSON forrást illesszük be ebbe a JSON vizualizációs alkalmazásba: https://altearius.github.io/tools/json/index.html. Keressünk rá egy kép URL-jére, majd kattintsunk rá. A bal oldali oszlop alján meg fog jelenni a kiválasztott elem elérési útja a JSON hierarchiában, pl.: root.data.children[1].data.url. Vagyis a root.data.children típusa lista. Ezen lista elemei rekordok, s minden egyes rekordban a data.url-t kell kiszednünk.
  • Írjunk egy Python szkriptet, ami leszedi a JSON forrást, átkonvertálja Python szótárrá, majd kiíratja a root.data.children listát.
  • Ha megvagyunk ezzel, akkor bővítsük a szkriptet: a lista elemeiből szedjük ki a data.url részt s csak ezt nyomtassuk ki.

Feladat

(a) Írassuk ki az Earthporn oldalon található képek URL-jét.

(b) Ha az URL egy képre mutat, akkor írassuk ki a kép dimenzióját is (szélesség, magasság). Tipp: Pillow modul (ez a PIL modul folytatása, így érdemesebb inkább a Pillow-t használni).

Linkek

  • JSON-path (saját projekt; a segítségével egy értéknek a kulcsát könnyedén meg tudjuk határozni)
Cloud City

  

Blogjaim, hobbi projektjeim

* The Ubuntu Incident
* Python Adventures
* @GitHub
* heroku
* extra
* haladó Python
* YouTube listák


Debrecen | la France


[ edit ]

Edit - History - Print *** Report - Recent Changes - Search
Page last modified on 2022 November 29, 06:33