A honlapok látogatottságáról a webszerverek legtöbbször naplót vezetnek. Az általunk vizsgált weboldal naplójából részletek találhatók a webstat.txt szöveges állományban. A napló időrend szerint rendezett, egy-egy sorában egy látogatás adatai szerepelnek:
a használt böngésző neve, vagy egy kötőjel, ha a böngésző típusa nem volt megállapítható;
a böngészés dátuma (minden dátum 2020. februári);
a weboldalt felkereső kliensszámítógép IP-címe;
amennyiben a látogató az oldal címét beírva kereste föl a weboldalt, akkor a "honlap" szó, egyébként annak a weboldalnak vagy alkalmazásnak a címe, ahonnan hivatkozással a honlapra került a látogató.
A szöveges állományban a fenti adatokat szóköz választja el a mintának megfelelően:
Chrome 2020.02.11 130.43.220.233 www.google.com
Firefox 2020.02.11 134.255.106.38 www.google.com
Safari 2020.02.11 134.255.91.250 honlap
Készítsünk programot, amellyel megoldjuk a következő feladatokat. Minden feladatrész elkészítésekor írjuk ki a feladat sorszámát (pl. 1. feladat:), valamint a beolvasás és a kiírás formátumát a minta alapján oldjuk meg. Az ékezetmentes kiírás is elfogadott.
Olvassuk be és tároljuk el a webstat.txt állományt, majd adjuk meg, hogy hány adatsor szerepel a naplóban.
Adjuk meg táblázatos elrendezéssel (vagyis tabulátorokkal elválasztva), hogy az egyes napokon hány látogató adatai szerepelnek a naplóban.
Soroljuk fel azokat a böngészőket, amelyek szerepelnek a naplóban. A listában minden név egyszer szerepeljen és a neveket vesszővel válasszuk el.
Adjunk statisztikát arról, hogy a honlapot Chrome böngészővel felkeresők hogyan érték el a weboldalt. Számítsuk ki, hogy hány százalékuk adta meg a honlap címét, illetve hány százalékuk jött máshonnan a honlapra. Az eredményt egy tizedesjegyre kerekítve írjuk ki a minta szerint.
Vizsgáljuk meg az adatokat, és adjuk meg azokat az IP címeket, amelyekről egy adott napon többször is fölkeresték a weboldalt. A listában minden IP-cím csak egyszer szerepeljen.
Kérjünk be egy IP-címet, és adjuk meg, hogy mely napokon keresték föl a weboldalt a bekért címnek legalább az első két bájtjával azonos címekről. Készítsünk egy szöveges állományt, amelybe soronként megadjuk a talált napokat és IP-címeket a napló szerinti sorrendben. Az állomány neve a bekért IP-címből épüljön fel úgy, hogy a címben szereplő pontok helyére az aláhúzásjel kerüljön, és a kiterjesztése txt legyen.
3. feladat
A böngészők: Firefox, Edge, Safari, Chrome, Opera
4. feladat
www.google.com
40.6%
kereso.startlap.hu
0.3%
android-app
1.3%
honlap
51.3%
hu.m.wikipedia.org
0.6%
www.google.co.uk
0.3%
www.google.hu
5.3%
5. feladat
Amely címekről többször is jártak az oldalon egy adott napon: 176.63.29.84, 81.182.158.248, 176.63.7.203, 84.236.112.248, 176.63.15.239, 188.36.1.21, 78.131.50.229, 78.139.0.242, 79.122.109.60, 89.133.27.133, 176.63.25.170, 176.63.28.31, 188.156.108.17, 134.255.69.254, 89.134.196.236
6. feladat
Kérek egy IP címet: 188.156.108.17
A 188_156_108_17.txt fájl elkészült.
# 1. feladat
print('1. feladat')
with open('webstat.txt') as fajl:
forras = fajl.read().splitlines()
adatok = [sor.split(' ') for sor in forras]
print('A beolvasott sorok száma:',len(adatok))
# 2. feladat
print('\n2. feladat')
minden_nap = [adat[1] for adat in adatok]
napok = set(minden_nap)
for nap in napok: print(nap,'\t',minden_nap.count(nap),'látogató')
# 3. feladat
print('\n3. feladat')
print('A böngészők:',', '.join({adat[0] for adat in adatok if adat[0]!='-'}))
# 4. feladat
print('\n4. feladat')
eleresek = [adat[3] for adat in adatok]
for eleres in set(eleresek): szazalek = int(eleresek.count(eleres)/len(eleresek)*1000)/10 print(eleres,' '*(20-len(eleres)),str(szazalek)+'%')
# 5. feladat
print('\n5. feladat')
ip_cimek = [adat[2] for adat in adatok]
tobbszor = []
for ip_cim in set(ip_cimek): if ip_cimek.count(ip_cim)>1: tobbszor.append(ip_cim)
print('Amely címekről többször is jártak az oldalon egy adott napon:',', '.join(tobbszor))
# 6. feladat
print('\n6. feladat')
ip_cim = input('Kérek egy IP címet: ').split('.')
napok = [[adat[1],adat[2]] for adat in adatok if adat[2].split('.')[0]==ip_cim[0] and adat[2].split('.')[1]==ip_cim[1]]
fajl = open('_'.join(ip_cim)+'.txt','w')
for nap in napok: print(nap[0],nap[1],file=fajl)
fajl.close()
print('A','_'.join(ip_cim)+'.txt fájl elkészült.')