Kirjoittaja Aihe: IIHF:n sivu liian vaikea Python Pandalle  (Luettu 2399 kertaa)

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
IIHF:n sivu liian vaikea Python Pandalle
« : 23.12.22 - klo:07.23 »
Teinpä kokeilun Python Pandalla. Aluksi ilman lxml:ää, mutta kun virheilmoitus antoi ymmärtää, että se tarvitaan, niin asensin pipillä sen. Sitten kun ajoin ohjelman, tuli monta riviä virheilmoitusta. Kun katselee tuota sivua, siinä on monimutkaisia rakenteita. Ja vielä kun katsoo sivun lähdekoodia, ei siellä taulukoita olekaan. Ilmeisesti Pandalla ei voikaan lukea tuota sivua. Yksi esimerkkiohjelma kykeni lataamaan Wikipediasta ison taulukon tiedot helposti.

Koodia: [Valitse]
import pandas as pd  # version 1.5.2
import lxml  # version 4.9.2

if __name__ == '__main__':
    site = 'https://www.iihf.com/en/events/2023/wm20/schedule'
    games = pd.read_html(site)
    games.info()

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: IIHF:n sivu liian vaikea Python Pandalle
« Vastaus #1 : 23.12.22 - klo:14.54 »
Tuollaisen sivun tulkinta vaatii kustomoitua koodia tai kehittyneen koneoppimismallin. Sivulle linkitetty PDF voisi olla helpompi lähde:
https://www.iihf.com/pdf/751/ihm751000_08_1_0

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: IIHF:n sivu liian vaikea Python Pandalle
« Vastaus #2 : 23.12.22 - klo:16.59 »
Tuollaisen sivun tulkinta vaatii kustomoitua koodia tai kehittyneen koneoppimismallin. Sivulle linkitetty PDF voisi olla helpompi lähde:
https://www.iihf.com/pdf/751/ihm751000_08_1_0

Koodia: [Valitse]
import pandas as pd  # version 1.5.2
import lxml  # version 4.9.2
from tabula import read_pdf

if __name__ == '__main__':
    site = 'https://www.iihf.com/pdf/751/ihm751000_08_1_0'
    # games = read_pdf(site)
    df = read_pdf(site, pages='all')
    df.info()

Tulee virheilmoitukset: (ja vaikuttaa minulle kohtalaisen aloittelijalle liian vaikeilta ratkoa muuten kuin tuo FORBIDDEN, joka tarkoittanee, että IIHF:n palvelin ei hyväksy tietopyyntöä.
Koodia: [Valitse]
Traceback (most recent call last):
  File "Projects/IIHF_M18/main.py", line 9, in <module>
    df = read_pdf(site, pages='all')
  File "/home/user/venv/lib/python3.10/site-packages/tabula/io.py", line 415, in read_pdf
    path, temporary = localize_file(input_path, user_agent, use_raw_url=use_raw_url)
  File "/home/user/venv/lib/python3.10/site-packages/tabula/file_util.py", line 59, in localize_file
    req = urlopen(path_or_buffer)
  File "/usr/lib/python3.10/urllib/request.py", line 216, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.10/urllib/request.py", line 525, in open
    response = meth(req, response)
  File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
    response = self.parent.error(
  File "/usr/lib/python3.10/urllib/request.py", line 563, in error
    return self._call_chain(*args)
  File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.10/urllib/request.py", line 643, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

Process finished with exit code 1

Jää sitten vielä keinoksi kirjoittaa IIHF:lle kirje, että tarjoaisivat nuo .ics -tiedostona, joaa on huomioitu TimeZonet. Eli menee suoraan kalenteriin oikeilla kellonajoilla penkkiurheilijan kotimaassa. Tietysti helpottaisi jo se, että html-sivulla ajat olisivat penkkiurheilijan timezonessa. Mutta alkuperäinen idea oli tehdä pulautin, joka veisi nuo Google-kalenteriin. Optiolla vain Suomen pelit tai valinnan mukaan kaikki pelit.
« Viimeksi muokattu: 23.12.22 - klo:17.08 kirjoittanut ilkant »