Habrastatistica: esplorare le sezioni più e meno visitate del sito
Ciao Habr.
В sezione precedente Il traffico di Habr è stato analizzato in base ai parametri principali: numero di articoli, visualizzazioni e valutazioni. Tuttavia, la questione della popolarità delle sezioni del sito è rimasta inesplorata. È diventato interessante esaminarlo in modo più dettagliato e trovare gli hub più popolari e quelli più impopolari. Infine, esaminerò più in dettaglio l'effetto geektimes, concludendo con una nuova selezione dei migliori articoli basata su nuove classifiche.
Per coloro che sono interessati a quello che è successo, il seguito è tagliato.
Permettimi di ricordarti ancora una volta che le statistiche e le valutazioni non sono ufficiali, non ho informazioni privilegiate. Inoltre, non è garantito che io non abbia commesso un errore da qualche parte o che mi sia sfuggito qualcosa. Ma comunque penso che si sia rivelato interessante. Inizieremo prima con il codice; chi non è interessato può saltare le prime sezioni.
Raccolta dati
Nella prima versione del parser veniva preso in considerazione solo il numero di visualizzazioni, commenti e valutazioni degli articoli. Questo è già buono, ma non ti consente di effettuare query più complesse. È tempo di analizzare le sezioni tematiche del sito; questo ti permetterà di fare ricerche piuttosto interessanti, ad esempio vedere come è cambiata la popolarità della sezione “C++” nel corso degli anni.
Il parser degli articoli è stato migliorato, ora restituisce gli hub a cui appartiene l'articolo, così come il nickname dell'autore e la sua valutazione (anche qui si possono fare molte cose interessanti, ma questo verrà dopo). I dati vengono salvati in un file CSV simile a questo:
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
...
Riceveremo l'elenco dei principali snodi tematici del sito.
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)
La funzione find_between e la classe Str selezionano una stringa tra due tag, io le ho usate prima. Gli hub tematici sono contrassegnati con un "*" in modo che possano essere facilmente evidenziati e puoi anche rimuovere i commenti dalle righe corrispondenti per ottenere sezioni di altre categorie.
L'output della funzione get_hubs è un elenco abbastanza impressionante, che salviamo come dizionario. Presento specificamente l'elenco nella sua interezza in modo che tu possa stimarne il volume.
I restanti hub sono stati conservati allo stesso modo. Ora è facile scrivere una funzione che restituisca il risultato se l'articolo appartiene a geektimes o a un hub del profilo.
Visualizziamo il numero di articoli pubblicati utilizzando Matplotlib:
Ho diviso gli articoli “geektimes” e “geektimes only” nella tabella, perché Un articolo può appartenere a entrambe le sezioni contemporaneamente (ad esempio “DIY” + “microcontrollori” + “C++”). Ho usato la designazione “profilo” per evidenziare gli articoli del profilo sul sito, anche se forse il termine inglese profilo per questo non è del tutto corretto.
Nella parte precedente ci siamo interrogati sull’“effetto geektimes” legato al cambiamento delle regole di pagamento degli articoli per geektimes a partire da quest’estate. Mostriamo separatamente gli articoli di geektimes:
Il risultato è interessante. Il rapporto approssimativo tra le visualizzazioni degli articoli di geektimes e il totale è di circa 1:5. Ma mentre il numero totale di visualizzazioni ha oscillato notevolmente, la visualizzazione di articoli di “intrattenimento” è rimasta più o meno allo stesso livello.
Puoi anche notare che il numero totale di visualizzazioni degli articoli nella sezione “geektimes” è ancora diminuito dopo la modifica delle regole, ma “a occhio”, di non più del 5% dei valori totali.
È interessante osservare il numero medio di visualizzazioni per articolo:
Per gli articoli di “intrattenimento” è circa il 40% sopra la media. Questo probabilmente non è sorprendente. Il fallimento di inizio aprile non mi è chiaro, forse è successo proprio questo, oppure si è trattato di qualche errore di analisi, o forse uno degli autori di geektimes è andato in vacanza ;).
A proposito, il grafico mostra altri due picchi evidenti nel numero di visualizzazioni di articoli: il Capodanno e le vacanze di maggio.
Hub
Passiamo alla promessa analisi degli hub. Elenchiamo i primi 20 hub per numero di visualizzazioni:
Sorprendentemente, l’hub più popolare in termini di opinioni è stato “Sicurezza dell’informazione”; tra i primi 5 leader figurano anche “Programmazione” e “Scienza popolare”.
Antitop occupa Gtk e Cocoa.
Ti svelo un segreto, si vedono anche gli hub superiori qui, sebbene il numero di visualizzazioni non sia mostrato lì.
Valutazione
E infine, la valutazione promessa. Utilizzando i dati di analisi degli hub, possiamo visualizzare gli articoli più popolari per gli hub più popolari per quest'anno 2019.
E infine, affinché nessuno si offenda, darò la valutazione dell'hub meno visitato “gtk”. Nel giro di un anno fu pubblicato uno L'articolo, che occupa anche “automaticamente” la prima riga del rating.