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 ]

Py /

20170514a

steamdb.info/sales

A https://steamdb.info/sales/ oldalról szedjük le a játékok címét, árát, ill. értékelését.

Itt most csak egy részleges megoldást nézünk meg. Ezen poszt írásakor így nézett ki az oldal teteje:

Keressük meg az első játék adatait a HTML forrásban:

A releváns rész pirossal lett megjelölve. Mint látható, egy-egy játék adatai egy-egy <tr> tag-en belül találhatók meg.

V1

Menjünk végig az összes játékot tartalmazó tr tag-en, és írassuk ki a játékok címeit:

import bs4
import requests

URL = "https://steamdb.info/sales/"

def main():
    r = requests.get(URL)
    bs = bs4.BeautifulSoup(r.text, "lxml")

    for tr in bs.find_all('tr', class_='appimg'):
        title_tag = tr.find('a', class_='b')
        title = title_tag.text

        print(title)

main()

A HTML forrás 618. sorában látható, hogy a tr tag két CSS osztályhoz IS tartozik (app és appimg). Mivel az appimg osztályba is beletartozik, ezért a "class_='appimg'" meg fogja találni.

Kimenet:

Alan Wake
Alan Wake Collector's Edition
Alan Wake's American Nightmare
...

V2

Iteráljunk végig egy játékot tartalmazó tr tag gyermekein:

def main():
    r = requests.get(URL)
    bs = bs4.BeautifulSoup(r.text, "lxml")

    for tr in bs.find_all('tr', class_='appimg'):
        for ch in tr.findChildren():
            print(ch)
            print("-" * 20)
        #
        break    # let's stop after the 1st game

Az egyszerűség kedvéért most megállunk az 1. játék után. Kimenet:

<td>
<a class="info-icon octicon" href="http://store.steampowered.com/app/108710/..." target="_blank"></a>
</td>
--------------------
<a class="info-icon octicon" href="http://store.steampowered.com/app/108710/..." target="_blank"></a>
--------------------
<td class="applogo">
<a href="/app/108710/" target="_blank">
<img alt="" src="/static/img/applogo.gif"/>
</a>
</td>
--------------------
<a href="/app/108710/" target="_blank">
<img alt="" src="/static/img/applogo.gif"/>
</a>
--------------------
<img alt="" src="/static/img/applogo.gif"/>
--------------------
<td>
<a class="b" href="/app/108710/" target="_blank">Alan Wake</a>
<i class="subinfo">Game</i>
</td>
--------------------
<a class="b" href="/app/108710/" target="_blank">Alan Wake</a>
--------------------
<i class="subinfo">Game</i>
--------------------
<td class="price-discount" data-sort="90">-90%</td>
--------------------
<td data-sort="299">$2.99</td>
--------------------
<td class="timeago" data-sort="1494867600" title="2017-05-15T17:00:00+00:00"></td>
--------------------
<td data-sort="91.37">
<span aria-label="Positive: 14755 - Negative: 1307" class=" b tooltipped tooltipped-n">91%</span>
</td>
--------------------
<span aria-label="Positive: 14755 - Negative: 1307" class=" b tooltipped tooltipped-n">91%</span>
--------------------
<td class="timeago" data-sort="1494695413" title="2017-05-13T17:10:13+00:00"></td>
--------------------

Feladat

Írjunk egy scraper-t, ami kiszedi az aktuális játékok listáját, majd megjeleníti a top játékokat. Egy játékot akkor tekintsünk top játéknak, ha az értékelése legalább 90%-os. A kimenetben rendezzük a játékokat értékelésük szerint. Egy lehetséges kimenet:

Impossible Creatures Steam Edition (95%): $2.49
Race The Sun (93%): $4.99
The Journey Down: Chapter Two (93%): $3.74
Magicka (93%): $2.99
Furi (92%): $11.99
DOOM (92%): $19.79
...

További ötletek

A fenti kis szkriptet nagyon sokféleképpen tovább lehet fejleszteni. Pl.:

  • Fusson le minden nap, és az aktuális listát küldje el nekünk e-mailben.
  • Regisztáljunk néhány nagyon várt játékot (pl. Fallout 4). Ha egy ilyen játék megjelenik a listában, azonnal küldjön nekünk egy e-mailt.
  • A tr tag-en belül szerepel a játék steam-es URL-je is. Arra az oldalra is ellátogathatunk, és folytathatjuk ott a scrape-elést. Ott milyen a játék megítélése? Koncentrálhatunk csak az overwhelmingly positive címekre. Hány százalékos a gamma a Metacritic-en (ez is ott van a steam-es oldalon)? Ezzel az infóval is bővíthetjük az adatbázisunkat egy játékról.
  • Húzzunk fel az ötletre egy komplett webalkalmazást. Regisztrálhatnak a user-ek, s bejelölhetik a várva-várt játékaikat. Ha egy játék olcsóbban megvehető, akkor e-mail-ben tájékoztassuk a user-eket.
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 2017 May 14, 10:03