Python az iskolában Wiki
Advertisement
Ambox important Ez a szócikk az érettségi követelményeket meghaladó ismeretet tartalmaz.

A feladat: töltsük le a http://www.oh.gov.hu/kozoktatas/kapcsolodo-jogszabaly/2010-januar-1-jetol weboldalt a benne foglalt sok-sok PDF dokumentummal (tantárgyanként kettő) együtt – vagyis az érettségi követelményeket és vizsgalírásokat. Ehhez a lap forrásának tanulmányozása után egy egyszerű letöltésvezérlőt készítünk. Megnyitjuk a táblázatot és reguláris kifejezésekkel megkeressük benne a letöltendő dokumentumok címét. A lapforrásban relatív útvonal van megadva; ezt ki kell egészítenünk a letöltéshez, illetve törölnünk kell a mentendő állománynév meghatározásához. (Ez látható a nemkell változóban.)

Kis magyarázat a regexekhez:

  • re.compile: ennek segítségével a minta változóban egy lefordított mintát tárolunk. Maga a kifejezés egyszerű, csak kevés helyettesítés van benne:
    • \. – a pont karakter escape-elve
    • .*? – tetszőleges karakterhalmaz, de nem mohón, azaz az utána következő rész első előfordulásáig (magyarán ne történhessen olyan, hogy az első link elejétől a 168. végéig egyszerre talál meg mindent). A . a "bármilyen karakter" jele, a * a megszokott joker (0 vagy több előfordulás), a ? a "nem mohón" utasítás.
    • ( ) – memóriaként szolgál (ld. group(1))
  • minta.finditer(oldal): a lefordított minta összes előfordulását adja vissza az oldal nevű szövegben generátorként, a for ciklussal dolgozhatjuk fel.
  • group(1): a találaton belül az első kerek zárójel tartalma (ez lesz a letöltendő PDF relatív címe és neve)

Végül magát a táblázatot is elmentjük ugyanabba a könyvtárba, természetesen elérési út nélküli filenevekkel, hogy a saját gépünkön is működjék. (Vegyük észre, hogy az elérési út összes előfordulásának egy lépésben történő eltávolításához stringműveletet használtunk; ez egyszerűbb és gyorsabb is a reguláris kifejezéseknél. Azért tehettük ezt meg, mert az eltávolítandó szöveg konstans.) Mivel már átalakítottuk UTF-8 szöveggé, hogy használhassuk a regexeket, így a codecs modul importálásával tudjuk ezzel a kódolással elmenteni.

Mindhárom importált modul a standard könyvtár része.

Check Tesztelve a 3.1.2 verzióban.

"""
Letöltjük a 40/2002 OM rendelet mellékleteit
az egyes tárgyak érettségi követelményeiről.
"""

import urllib.request, re, codecs

path = 'C:/Dokumentumok/Érettségi/Negyvenes/' #Ahová letöltjük
ompath = 'http://www.oh.gov.hu' #A letöltési cím eleje (a forrásban relatív címek vannak)
fődok = 'http://www.oh.gov.hu/kozoktatas/kapcsolodo-jogszabaly/2010-januar-1-jetol'
minta = re.compile('<div><a href="(.*?\.pdf)">.*?\.pdf</a></div>')
nemkell = '/letolt/okev/doc/erettsegi_40_2002_201001/'

#Megnyitjuk a táblázatot tartalmazó weboldalt (fődok)
oldal = urllib.request.urlopen(fődok).read().decode('utf-8')
#Reguláris kifejezéssel felsoroljuk a letöltendő PDF-eket
for link in minta.finditer(oldal):
    tárgy = link.group(1)
    print(tárgy)
    # Amit stringművelettel megcsinálhatunk, arra ne használjunk regexet,
    # mert a stringműveletek gyorsabbak. Levágjuk az útvonalat a mentéshez.
    letöltnév = tárgy[len(nemkell):]
    req = urllib.request.Request(ompath+tárgy)
    response = urllib.request.urlopen(req)
    the_page = response.read()
    print (len(the_page)) #A fileméret ellenőrzésül
    #És most elmentjük a saját lemezünkre (binárisan!)
    f = open(path+letöltnév, 'wb')
    f.write(the_page)
    f.close()

#Most pedig elmentjük a weboldalt is a táblázattal.
#Töröljük a szerveroldali elérési utat a filenevekből.
index = codecs.open(path+'index.htm', 'w', 'utf-8')
index.write(oldal.replace(nemkell,''))
index.close()

Ez a szócikk forráskódot tartalmaz, amely egy WikiMedia-kiegészítés segítségével olyan színesen jeleníthető meg, mint például ebben a Wikipédia-cikkben. A kiegészítést a Wikia-stáb ígérete szerint 2010 végéig frissítik, addig türelmet kérünk a fapados kinézet miatt.

Advertisement