ProHoster > Блог > internet vijesti > Habrastatistika: istraživanje najposjećenijih i najmanje posjećenih dijelova stranice
Habrastatistika: istraživanje najposjećenijih i najmanje posjećenih dijelova stranice
Hej Habr.
В prethodni dio Promet Habra analiziran je prema glavnim parametrima - broju članaka, njihovim pregledima i ocjenama. Međutim, pitanje popularnosti sekcija sajta ostalo je neispitano. Postalo je zanimljivo pogledati ovo detaljnije i pronaći najpopularnije i najnepopularnije čvorišta. Konačno, detaljnije ću pogledati geektimes efekat, završavajući s novim izborom najboljih članaka na osnovu novih rangiranja.
Za one koje zanima šta se dogodilo, nastavak je ispod reza.
Još jednom da podsjetim da statistika i ocjene nisu zvanične, nemam insajderske informacije. Takođe nije garantovano da nisam negde pogrešio ili nešto propustio. Ali ipak, mislim da je ispalo zanimljivo. Prvo ćemo početi s kodom, a oni koje to ne zanima mogu preskočiti prve dijelove.
Prikupljanje podataka
U prvoj verziji parsera uzet je u obzir samo broj pregleda, komentara i ocjena članka. Ovo je već dobro, ali vam ne dozvoljava da pravite složenije upite. Vrijeme je da analizirate tematske dijelove stranice; to će vam omogućiti da napravite prilično zanimljivo istraživanje, na primjer, vidite kako se popularnost odjeljka "C++" promijenila tokom nekoliko godina.
Parser članka 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 uraditi, ali to će doći 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 listu glavnih tematskih čvoriš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 odabiru niz između dvije oznake, ja sam ih koristio ranije. Tematska čvorišta su označena sa "*" tako da se mogu lako istaknuti, a možete i dekomentirati odgovarajuće linije da biste dobili odjeljke drugih kategorija.
Izlaz funkcije get_hubs je prilično impresivna lista, koju čuvamo kao rečnik. Listu posebno predstavljam u cijelosti kako biste mogli procijeniti njen obim.
Preostala čvorišta su sačuvana na isti način. Sada je lako napisati funkciju koja vraća rezultat bez obzira da li članak pripada geektimes ili čvorištu profila.
Prikazujemo broj objavljenih članaka koristeći Matplotlib:
Podijelio sam članke “geektimes” i “geektimes only” u grafikonu, jer Članak može istovremeno pripadati oba odjeljka (na primjer, “uradi sam” + “mikrokontroleri” + “C++”). Koristio sam oznaku „profil“ da bih istakao članke profila na sajtu, iako engleski izraz profil za ovo možda nije sasvim tačan.
U prethodnom dijelu smo pitali o “geektimes efektu” koji je povezan s promjenom pravila plaćanja za članke za geektimes od ovog ljeta. Prikažimo geektimes članke zasebno:
Rezultat je zanimljiv. Približan omjer pregleda geektimes članaka prema ukupnom je negdje oko 1:5. No, dok je ukupan broj pregleda osjetno oscilirao, gledanost „zabavnih“ članaka ostala je na približno istom nivou.
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. Ovo vjerovatno nije iznenađujuće. Nejasan mi je neuspjeh početkom aprila, možda se to i dogodilo, ili je u pitanju neka greška u raščlanjivanju, ili je možda neko od geektimes autora otišao na odmor ;).
Inače, na grafikonu su vidljiva još dva uočljiva vrhunca u broju pregleda članaka - novogodišnji i majski praznici.
Čvorišta
Pređimo na obećanu analizu čvorišta. Hajde da navedemo 20 najboljih centara po broju pregleda:
Iznenađujuće, najpopularnije središte u pogledu pregleda bila je „Informaciona bezbednost“, a među 5 vodećih su takođe „Programiranje“ i „Popularna nauka“.
Antitop zauzima Gtk i Kakao.
Odaću vam tajnu, mogu se vidjeti i vrhunska čvorišta ovdje, iako broj pregleda tu nije prikazan.
Ocena
I na kraju, obećani rejting. Koristeći podatke analize hub-a, možemo prikazati najpopularnije članke za najpopularnije hubove za ovu 2019. godinu.
I na kraju, da se niko ne uvrijedi, daću ocjenu najmanje posjećenog čvorišta “gtk”. U roku od godinu dana objavljena je одна Članak, koji takođe "automatski" zauzima prvi red rejtinga.