Habrastatistika: istraživanje najposjećenijih i najmanje posjećenih dijelova stranice
Hej Habr.
В prethodni dio Posjećenost Habra analizirana je prema glavnim parametrima - broju članaka, njihovim pregledima i ocjenama. Međutim, pitanje popularnosti odjeljaka stranice ostalo je neispitano. Postalo je zanimljivo pogledati ovo detaljnije i pronaći najpopularnija i najnepopularnija čvorišta. Na kraju ću se detaljnije osvrnuti na geektimes efekt, završavajući s novim izborom najboljih članaka na temelju novih ljestvica.
Za one koje zanima što se dogodilo, nastavak je pod rezom.
Još jednom podsjećam da statistika i ocjene nisu službene, nemam nikakvih insajderskih informacija. Također nije zajamčeno da nisam negdje pogriješio ili nešto propustio. Ali ipak, mislim da je ispalo zanimljivo. Prvo ćemo započeti s kodom; one koje to ne zanima mogu preskočiti prve dijelove.
Prikupljanje podataka
U prvoj verziji parsera u obzir su uzeti samo broj pregleda, komentara i ocjene članaka. Ovo je već dobro, ali vam ne dopušta da postavljate složenije upite. Vrijeme je da analiziramo tematske dijelove stranice; to će vam omogućiti da napravite vrlo zanimljivo istraživanje, na primjer, pogledajte kako se popularnost odjeljka "C++" mijenjala tijekom nekoliko godina.
Parser članaka je poboljšan, sada vraća čvorišta kojima članak pripada, kao i nadimak autora i njegovu ocjenu (i ovdje se može puno zanimljivih stvari, ali to će biti kasnije). Podaci se spremaju u csv datoteku koja izgleda otprilike ovako:
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
...
Primit ćemo popis glavnih tematskih središta stranice.
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 i klasa Str biraju niz između dvije oznake, ja sam ih koristio ranije. Tematska čvorišta označena su znakom "*" kako bi se mogla lako istaknuti, a možete i ukloniti komentare s odgovarajućih redaka kako biste dobili odjeljke drugih kategorija.
Izlaz funkcije get_hubs je prilično impresivan popis, koji spremamo kao rječnik. Popis posebno prenosim u cijelosti kako biste mogli procijeniti njegovu količinu.
Prikazujemo broj objavljenih članaka koristeći Matplotlib:
Podijelio sam članke "geektimes" i "geektimes only" u grafikonu, jer Članak može pripadati objema sekcijama istovremeno (npr. “DIY” + “mikrokontroleri” + “C++”). Koristio sam oznaku "profil" kako bih istaknuo profilne članke na stranici, iako možda engleski izraz profile za to nije sasvim točan.
U prethodnom smo dijelu pitali o “geektimes efektu” povezanom s promjenom pravila plaćanja za članke za geektimes od ovog ljeta. Prikažimo članke geektimesa zasebno:
Rezultat je zanimljiv. Približan omjer pregleda geektimes članaka prema ukupnom broju je negdje oko 1:5. No, dok je ukupan broj pregleda osjetno oscilirao, gledanost “zabavnih” članaka ostala je na približno istoj razini.
Također možete primijetiti da je ukupan broj pregleda članaka u odjeljku “geektimes” i dalje pao nakon promjene pravila, ali “na oko”, ne više od 5% od ukupnih vrijednosti.
Zanimljivo je pogledati prosječan broj pregleda po članku:
Za "zabavne" članke to je oko 40% iznad prosjeka. To vjerojatno nije iznenađujuće. Kvar početkom travnja mi je nejasan, možda se to dogodilo, ili je neka greška u parsiranju, ili je netko od autora geektimesa otišao na godišnji odmor ;).
Usput, grafikon pokazuje još dva zamjetna vrhunca u broju pregleda članaka - Novu godinu i svibanjske praznike.
čvorišta
Prijeđimo na obećanu analizu čvorišta. Nabrojimo 20 najboljih čvorišta po broju pregleda:
Iznenađujuće, najpopularnije središte u smislu pogleda bilo je “Informacijska sigurnost”, a među prvih 5 vodećih su još “Programiranje” i “Popularna znanost”.
Antitop zauzima Gtk i Kakao.
Odat ću vam tajnu, vide se i gornje glavčine здесь, iako tu nije prikazan broj pregleda.
Ocjena
I na kraju, obećana ocjena. Koristeći podatke analize čvorišta, možemo prikazati najpopularnije članke za najpopularnija čvorišta za ovu 2019. godinu.
I na kraju, da se nitko ne uvrijedi, dat ću ocjenu najmanje posjećenog čvorišta “gtk”. U roku od godinu dana objavljena je одна Članak, koji također "automatski" zauzima prvi redak ocjene.