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.

  1. Olvassuk be és tároljuk el a webstat.txt állományt, majd adjuk meg, hogy hány adatsor szerepel a naplóban.
  2. Adjuk meg táblázatos elrendezéssel, hogy az egyes napokon hány látogató adatai szerepelnek a naplóban.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Letöltés: webstat.txt

 

Minta

1. feladat
A beolvasott sorok száma: 300

 

2. feladat
2020.02.12      60 látogató
2020.02.14      65 látogató
2020.02.11      60 látogató
2020.02.15      46 látogató
2020.02.13      69 látogató

 

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.

 

 

Megoldás

# 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.')

News Reporter