Habrastatistics: udforske de mest og mindst besøgte dele af webstedet
Hej Habr.
В forrige del Habrs trafik blev analyseret i henhold til hovedparametrene - antallet af artikler, deres synspunkter og vurderinger. Spørgsmålet om webstedssektionernes popularitet forblev dog uundersøgt. Det blev interessant at se nærmere på dette og finde de mest populære og mest upopulære hubs. Til sidst vil jeg se på geektimes-effekten mere detaljeret, og slutter med et nyt udvalg af de bedste artikler baseret på nye placeringer.
For dem, der er interesserede i, hvad der skete, er fortsættelsen under skæring.
Lad mig igen minde dig om, at statistikken og vurderingerne ikke er officielle, jeg har ingen insider-oplysninger. Det er heller ikke garanteret, at jeg ikke lavede en fejl et eller andet sted eller gik glip af noget. Men alligevel synes jeg, det er blevet interessant. Vi starter med koden først; de, der ikke er interesserede i dette, kan springe de første afsnit over.
Dataindsamling
I den første version af parseren blev der kun taget hensyn til antallet af visninger, kommentarer og artikelvurderinger. Dette er allerede godt, men det giver dig ikke mulighed for at lave mere komplekse forespørgsler. Det er tid til at analysere de tematiske sektioner af webstedet; dette vil give dig mulighed for at lave ret interessant forskning, for eksempel se, hvordan populariteten af "C++"-sektionen har ændret sig over flere år.
Artikelparseren er blevet forbedret, nu returnerer den de hubs, som artiklen tilhører, samt forfatterens kaldenavn og hans vurdering (mange interessante ting kan også gøres her, men det kommer senere). Dataene gemmes i en csv-fil, der ser sådan ud:
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
...
Vi vil modtage en liste over de vigtigste tematiske hubs på webstedet.
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)
Find_between-funktionen og Str-klassen vælger en streng mellem to tags, jeg brugte dem tidligere. Tematiske hubs er markeret med et "*", så de nemt kan fremhæves, og du kan også fjerne kommentarer til de tilsvarende linjer for at få sektioner af andre kategorier.
Outputtet af get_hubs-funktionen er en ret imponerende liste, som vi gemmer som en ordbog. Jeg præsenterer specifikt listen i sin helhed, så du kan vurdere dens volumen.
De resterende nav blev bevaret på samme måde. Nu er det nemt at skrive en funktion, der returnerer resultatet, uanset om artiklen tilhører geektimes eller en profil-hub.
Vi viser antallet af publicerede artikler ved hjælp af Matplotlib:
Jeg delte artiklerne "nørdetider" og "kun nørdetider" i diagrammet, fordi En artikel kan tilhøre begge sektioner på samme tid (f.eks. "DIY" + "microcontrollers" + "C++"). Jeg brugte betegnelsen "profil" til at fremhæve profilartikler på siden, selvom det engelske udtryk profile for dette måske ikke er helt korrekt.
I den foregående del spurgte vi til "nørdetidseffekten" forbundet med ændringen af betalingsreglerne for artikler til nørdetider, der starter til sommer. Lad os vise geektimes-artiklerne separat:
Resultatet er interessant. Det omtrentlige forhold mellem visninger af geektimes-artikler og totalen er et sted omkring 1:5. Men mens det samlede antal visninger svingede mærkbart, forblev visningen af "underholdnings"-artikler på nogenlunde samme niveau.
Du kan også bemærke, at det samlede antal visninger af artikler i "geektimes"-sektionen stadig faldt efter ændring af reglerne, men "ved eye", med højst 5% af de samlede værdier.
Det er interessant at se på det gennemsnitlige antal visninger pr. artikel:
For "underholdnings"-artikler er det omkring 40 % over gennemsnittet. Dette er nok ikke overraskende. Fejlen i begyndelsen af april er uklar for mig, måske er det det, der skete, eller det er en form for parsefejl, eller måske tog en af geektime-forfatterne på ferie ;).
I øvrigt viser grafen to mere mærkbare toppe i antallet af visninger af artikler - nytårs- og majferien.
Hubs
Lad os gå videre til den lovede analyse af hubs. Lad os liste de 20 bedste hubs efter antal visninger:
Overraskende nok var den mest populære hub med hensyn til synspunkter "Informationssikkerhed"; top 5 ledere inkluderede også "Programmering" og "Populær videnskab".
Antitop indtager Gtk og Kakao.
Jeg skal fortælle dig en hemmelighed, de øverste hubs kan også ses her, selvom antallet af visninger ikke vises der.
Rating
Og endelig den lovede vurdering. Ved hjælp af hub-analysedata kan vi vise de mest populære artikler for de mest populære hubs for dette år 2019.
Og endelig, så ingen bliver fornærmet, vil jeg give vurderingen af den mindst besøgte hub "gtk". Inden for et år blev den udgivet одна Artiklen, som også "automatisk" indtager første linje i vurderingen.