Habrastatistics: explorando as seções mais e menos visitadas do site
Olá, Habr.
В parte anterior O tráfego de Habr foi analisado de acordo com os principais parâmetros - número de artigos, suas visualizações e classificações. No entanto, a questão da popularidade das seções do site permaneceu sem ser examinada. Tornou-se interessante observar isso com mais detalhes e encontrar os hubs mais populares e mais impopulares. Por fim, examinarei o efeito geektimes com mais detalhes, terminando com uma nova seleção dos melhores artigos com base em novas classificações.
Para quem se interessa pelo ocorrido, a continuação fica em segundo plano.
Deixe-me lembrar mais uma vez que as estatísticas e classificações não são oficiais, não tenho nenhuma informação privilegiada. Também não é garantido que não cometi um erro em algum lugar ou perdi alguma coisa. Mas ainda assim, acho que ficou interessante. Começaremos primeiro com o código; quem não estiver interessado nisso pode pular as primeiras seções.
Coleta de dados
Na primeira versão do analisador foram considerados apenas o número de visualizações, comentários e avaliações dos artigos. Isso já é bom, mas não permite fazer consultas mais complexas. É hora de analisar as seções temáticas do site; isso permitirá que você faça pesquisas bastante interessantes, por exemplo, veja como a popularidade da seção “C++” mudou ao longo de vários anos.
O analisador de artigos foi melhorado, agora retorna os hubs aos quais o artigo pertence, bem como o apelido do autor e sua avaliação (muitas coisas interessantes podem ser feitas aqui também, mas isso virá mais tarde). Os dados são salvos em um arquivo csv parecido com este:
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
...
Receberemos uma lista dos principais pólos temáticos do 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)
A função find_between e a classe Str selecionam uma string entre duas tags, eu as usei mais cedo. Os hubs temáticos são marcados com um “*” para que possam ser facilmente destacados, e você também pode descomentar as linhas correspondentes para obter seções de outras categorias.
A saída da função get_hubs é uma lista bastante impressionante, que salvamos como um dicionário. Estou apresentando especificamente a lista na íntegra para que vocês possam estimar seu volume.
Os demais hubs foram preservados da mesma forma. Agora é fácil escrever uma função que retorne o resultado quer o artigo pertença ao geektimes ou a um hub de perfil.
Exibimos o número de artigos publicados usando Matplotlib:
Dividi os artigos “geektimes” e “geektimes only” no gráfico, pois Um artigo pode pertencer a ambas as seções ao mesmo tempo (por exemplo, “DIY” + “microcontroladores” + “C++”). Usei a designação “perfil” para destacar artigos de perfil no site, embora talvez o termo inglês profile para isso não seja totalmente correto.
Na parte anterior questionámos sobre o “efeito geektimes” associado à alteração das regras de pagamento de artigos para geektimes a partir deste verão. Vamos exibir os artigos do geektimes separadamente:
O resultado é interessante. A proporção aproximada de visualizações dos artigos do geektimes em relação ao total é algo em torno de 1:5. Mas embora o número total de visualizações tenha flutuado visivelmente, a visualização de artigos de “entretenimento” permaneceu aproximadamente no mesmo nível.
Você também pode notar que o número total de visualizações de artigos da seção “geektimes” ainda caiu após a mudança nas regras, mas “a olho”, em não mais que 5% dos valores totais.
É interessante observar a média de visualizações por artigo:
Para artigos de “entretenimento” está cerca de 40% acima da média. Isto provavelmente não é surpreendente. A falha no início de abril não está clara para mim, talvez tenha sido isso que aconteceu, ou seja algum tipo de erro de análise, ou talvez um dos autores do Geektimes tenha saído de férias;).
A propósito, o gráfico mostra mais dois picos perceptíveis no número de visualizações de artigos - os feriados de Ano Novo e de maio.
Hubs
Passemos à prometida análise dos hubs. Vamos listar os 20 principais hubs por número de visualizações:
Surpreendentemente, o centro mais popular em termos de pontos de vista foi “Segurança da Informação”; os 5 principais líderes também incluíram “Programação” e “Ciência Popular”.
Antitop ocupa Gtk e Cocoa.
Vou te contar um segredo, os principais hubs também podem ser vistos aqui, embora o número de visualizações não seja mostrado lá.
Classificação
E, finalmente, a classificação prometida. Usando dados de análise de hub, podemos exibir os artigos mais populares dos hubs mais populares deste ano de 2019.
E por último, para que ninguém se ofenda, darei a classificação do hub menos visitado “gtk”. Em um ano foi publicado um O artigo, que também ocupa “automaticamente” a primeira linha da classificação.