Habrastatistika: raziskovanje najbolj in najmanj obiskanih delov spletnega mesta
Hej Habr.
В prejšnji del Habrov promet je bil analiziran glede na glavne parametre - število člankov, njihov ogled in ocene. Vendar je vprašanje priljubljenosti razdelkov spletnega mesta ostalo nepreverjeno. Zanimivo je bilo pogledati to podrobneje in najti najbolj priljubljena in najbolj nepriljubljena vozlišča. Nazadnje si bom podrobneje ogledal učinek geektimes in končal z novim izborom najboljših člankov na podlagi novih lestvic.
Za tiste, ki jih zanima, kaj se je zgodilo, je nadaljevanje pod rezom.
Naj vas še enkrat spomnim, da statistika in ocene niso uradne, nimam notranjih informacij. Prav tako ni zagotovljeno, da se nisem kje zmotil ali kaj spregledal. A kljub temu se mi zdi zanimivo. Najprej bomo začeli s kodo, tiste, ki jih to ne zanima, lahko prve razdelke preskočijo.
Zbiranje podatkov
V prvi različici razčlenjevalnika je bilo upoštevano le število ogledov, komentarjev in ocen člankov. To je že dobro, vendar vam ne omogoča izdelave bolj zapletenih poizvedb. Čas je, da analiziramo tematske razdelke spletnega mesta; to vam bo omogočilo precej zanimivo raziskavo, na primer, da vidite, kako se je priljubljenost razdelka »C++« spreminjala v nekaj letih.
Razčlenjevalec člankov je izboljšan, zdaj vrne vozlišča, ki jim članek pripada, pa tudi vzdevek avtorja in njegovo oceno (tudi tukaj je mogoče početi marsikaj zanimivega, a to pride kasneje). Podatki so shranjeni v datoteki csv, ki je videti nekako takole:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"Мессенджер Slack — причины выбора, косяки при внедрении и особенности сервиса, облегчающие жизнь",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
Prejeli bomo seznam glavnih tematskih središč spletnega mesta.
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
Funkcija find_between in razred Str izbereta niz med dvema oznakama, uporabil sem ju prej. Tematska vozlišča so označena z "*", tako da jih je mogoče preprosto označiti, prav tako pa lahko odkomentirate ustrezne vrstice, da dobite razdelke drugih kategorij.
Rezultat funkcije get_hubs je dokaj impresiven seznam, ki ga shranimo kot slovar. Seznam podajam posebej v celoti, da lahko ocenite obseg.
Preostala pesta so bila ohranjena na enak način. Zdaj je preprosto napisati funkcijo, ki vrne rezultat, ne glede na to, ali članek pripada geektimesu ali središču profila.
Število objavljenih člankov prikažemo z Matplotlib:
Na grafikonu sem razdelil članka »geektimes« in »geektimes only«, ker Članek lahko sodi v obe rubriki hkrati (npr. “DIY” + “mikrokontrolerji” + “C++”). Oznako “profil” sem uporabil za poudarjanje profilnih člankov na strani, čeprav morda angleški izraz profile za to ni povsem pravilen.
V prejšnjem delu smo spraševali o "učinku geektimesa", povezanem s spremembo pravil plačila za članke za geektimes, ki se začnejo to poletje. Prikažimo članke geektimes ločeno:
Rezultat je zanimiv. Približno razmerje ogledov člankov geektimesa glede na skupno je nekje 1:5. A medtem ko je skupno število ogledov opazno nihalo, je gledanost »razvedrilnih« člankov ostala na približno enaki ravni.
Opazite lahko tudi, da je skupno število ogledov člankov v razdelku »geektimes« po spremembi pravil še vedno padlo, vendar »na oko«, za največ 5% skupnih vrednosti.
Zanimivo je pogledati povprečno število ogledov na članek:
Za “razvedrilne” članke je približno 40 % nad povprečjem. To verjetno ni presenetljivo. Neuspeh v začetku aprila mi ni jasen, morda se je to zgodilo, ali je kakšna napaka pri razčlenjevanju, ali pa je šel kdo od avtorjev geektimesa na dopust ;).
Mimogrede, graf prikazuje še dva opazna vrha v številu ogledov člankov - novo leto in majske praznike.
Pesta
Preidimo k obljubljeni analizi vozlišč. Naštejmo 20 najboljših središč po številu ogledov:
Presenetljivo je bilo najbolj priljubljeno središče glede na oglede »Informacijska varnost«, med top 5 vodilnih sta bila tudi »Programiranje« in »Popularna znanost«.
Antitop zaseda Gtk in Cocoa.
Povedal vam bom skrivnost, da se vidijo tudi zgornja pesta tukaj, čeprav tam ni prikazano število ogledov.
Ocena
In za konec še obljubljena ocena. Z uporabo podatkov analize vozlišč lahko prikažemo najbolj priljubljene članke za najbolj priljubljena vozlišča za to leto 2019.
In končno, da ne bo kdo užaljen, bom dal oceno najmanj obiskanega vozlišča "gtk". V enem letu je bil objavljen одна Članek, ki tudi »samodejno« zaseda prvo vrstico ocene.