ProHoster > blog > internetnieuws > Habrastatistiek: het verkennen van de meest en minst bezochte delen van de site
Habrastatistiek: het verkennen van de meest en minst bezochte delen van de site
Hé Habr.
В vorig deel Het verkeer van Habr werd geanalyseerd op basis van de belangrijkste parameters: het aantal artikelen, hun meningen en beoordelingen. De kwestie van de populariteit van de sitesecties bleef echter ononderzocht. Het werd interessant om hier meer in detail naar te kijken en de populairste en meest impopulaire hubs te vinden. Ten slotte ga ik dieper in op het geektimes-effect, eindigend met een nieuwe selectie van de beste artikelen op basis van nieuwe ranglijsten.
Voor degenen die geïnteresseerd zijn in wat er is gebeurd, het vervolg ligt onder de noemer.
Ik wil u er nogmaals aan herinneren dat de statistieken en beoordelingen niet officieel zijn, ik beschik niet over voorkennis. Het is ook niet gegarandeerd dat ik niet ergens een fout heb gemaakt of iets heb gemist. Maar toch denk ik dat het interessant is geworden. We beginnen eerst met de code; wie hier niet in geïnteresseerd is, kan de eerste secties overslaan.
Gegevensverzameling
In de eerste versie van de parser werd alleen rekening gehouden met het aantal views, commentaren en artikelbeoordelingen. Dit is al goed, maar u kunt er geen complexere vragen mee stellen. Het is tijd om de thematische secties van de site te analyseren; hierdoor kun je behoorlijk interessant onderzoek doen, bijvoorbeeld om te zien hoe de populariteit van de sectie "C++" in de loop van de jaren is veranderd.
De artikelparser is verbeterd en retourneert nu de hubs waartoe het artikel behoort, evenals de bijnaam van de auteur en zijn beoordeling (hier kunnen ook veel interessante dingen worden gedaan, maar dat komt later). De gegevens worden opgeslagen in een csv-bestand dat er ongeveer zo uitziet:
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
...
We ontvangen een lijst met de belangrijkste thematische hubs van de site.
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)
De find_between-functie en de Str-klasse selecteren een string tussen twee tags, ik heb ze gebruikt vroeger. Thematische hubs zijn gemarkeerd met een "*", zodat ze gemakkelijk kunnen worden gemarkeerd, en u kunt ook de bijbehorende regels verwijderen om secties van andere categorieën te bekijken.
De uitvoer van de get_hubs-functie is een redelijk indrukwekkende lijst, die we opslaan als een woordenboek. Ik presenteer de lijst specifiek in zijn geheel, zodat u de omvang ervan kunt inschatten.
De overige hubs werden op dezelfde manier bewaard. Nu is het eenvoudig om een functie te schrijven die het resultaat retourneert, ongeacht of het artikel tot geektimes of een profielhub behoort.
We geven het aantal gepubliceerde artikelen weer met Matplotlib:
Ik heb de artikelen “geektimes” en “geektimes only” in het diagram verdeeld, omdat Een artikel kan tegelijkertijd tot beide secties behoren (bijvoorbeeld “DIY” + “microcontrollers” + “C++”). Ik heb de aanduiding “profiel” gebruikt om profielartikelen op de site onder de aandacht te brengen, hoewel de Engelse term profiel hiervoor misschien niet helemaal correct is.
In het vorige deel vroegen we naar het “geektimes-effect” dat gepaard gaat met de wijziging in de betalingsregels voor artikelen voor geektimes vanaf deze zomer. Laten we de geektimes-artikelen afzonderlijk weergeven:
Het resultaat is interessant. De geschatte verhouding tussen weergaven van geektimes-artikelen en het totaal ligt ergens rond de 1:5. Maar hoewel het totale aantal views merkbaar fluctueerde, bleef het aantal bekeken ‘entertainment’-artikelen ongeveer op hetzelfde niveau.
Je kunt ook merken dat het totale aantal weergaven van artikelen in de sectie “geektimes” nog steeds daalde na het wijzigen van de regels, maar “op het oog”, met niet meer dan 5% van de totale waarden.
Interessant is om te kijken naar het gemiddelde aantal views per artikel:
Voor ‘entertainment’-artikelen ligt dit ongeveer 40% boven het gemiddelde. Dit is waarschijnlijk niet verrassend. De mislukking begin april is mij onduidelijk, misschien is dat wat er is gebeurd, of is het een soort parseerfout, of misschien is een van de geektimes-auteurs op vakantie geweest ;).
Overigens laat de grafiek nog twee opvallende pieken zien in het aantal artikelweergaven: de nieuwjaars- en meivakantie.
Naven
Laten we verder gaan met de beloofde analyse van hubs. Laten we de 20 beste hubs opsommen op basis van het aantal weergaven:
Verrassend genoeg was ‘Informatiebeveiliging’ het meest populaire knooppunt in termen van opvattingen; tot de top 5 van leiders behoorden ook ‘Programmering’ en ‘Populaire wetenschap’.
Antitop bezet Gtk en Cocoa.
Ik zal je een geheimpje verklappen, de tophubs zijn ook te zien hier, hoewel het aantal views daar niet wordt weergegeven.
Waardering
En tot slot de beloofde beoordeling. Met behulp van hub-analysegegevens kunnen we de populairste artikelen voor de populairste hubs van dit jaar 2019 weergeven.
En tot slot, zodat niemand beledigd is, zal ik de beoordeling van de minst bezochte hub "gtk" geven. Binnen een jaar was het gepubliceerd één Het artikel, dat ook “automatisch” de eerste regel van de beoordeling bezet.