Хабрастатыстыка: даследуем найболей і найменш наведвальныя часткі сайта
Прывітанне, Хабр.
В папярэдняй часткі была прааналізавана наведвальнасць Хабра па асноўных параметрах - колькасці артыкулаў, іх праглядах і рэйтынгах. Аднак пытанне папулярнасці раздзелаў сайта засталося не разгледжаным. Стала цікава разгледзець гэта больш падрабязна, і знайсці самыя папулярныя і самыя непапулярныя хабы. Нарэшце, я разгледжу "geektimes-эфект" больш падрабязна, і ў завяршэнні чытачы атрымаюць новую падборку лепшых артыкулаў па новых рэйтынгах.
Каму цікава што атрымалася, працяг пад катом.
Яшчэ раз нагадаю, што статыстыка і рэйтынг не з'яўляюцца афіцыйнымі, ніякай інсайдэрскай інфармацыі ў мяне няма. Таксама не гарантуецца, што я недзе не памыліўся ці не прапусціў. Але ўсё ж, мяркую, атрымалася цікава. Мы прыступім спачатку да кода, каму гэта неактуальна, першыя раздзелы могуць прапусціць.
збор дадзеных
У першай версіі парсера ўлічвалася толькі колькасць праглядаў, каментароў і рэйтынг артыкулаў. Гэта ўжо нядрэнна, але не дазваляе рабіць больш складаныя запыты. Час прааналізаваць тэматычныя раздзелы сайта, гэта дазволіць рабіць дастаткова цікавыя даследаванні, напрыклад, паглядзець як мянялася папулярнасць раздзела «С++» за некалькі гадоў.
Парсер артыкулаў быў палепшаны, зараз ён вяртае хабы, да якіх адносіцца артыкул, а таксама нік аўтара і яго рэйтынг (тут таксама можна зрабіць шмат цікавага, але гэта потым). Дадзеныя захаваны ў csv-файле прыкладна такога выгляду:
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
...
Атрымаем спіс асноўных тэматычных хабаў сайта.
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 і клас Str вылучаюць радок паміж двух тэгаў, я выкарыстоўваў іх раней. Тэматычныя хабы адзначаны "*", так што іх лёгка вылучыць, можна таксама раскаментаваць адпаведныя радкі, каб атрымаць раздзелы іншых катэгорый.
На выхадзе функцыі get_hubs атрымліваем дастаткова вялікі спіс, які захоўваем як dictionary. Адмыслова прыводжу спіс цалкам, каб можна было ацаніць яго аб'ём.
Выводзім колькасць апублікаваных артыкулаў з дапамогай Matplotlib:
Я падзяліў у графіку артыкулы "geektimes" і "geektimes only", т.я. артыкул можа належаць да абедзвюх раздзелаў адначасова (напрыклад "DIY" + "мікракантролеры" + "З++"). Абазначэннем «profile» я вылучыў профільныя артыкулы сайта, хоць магчыма, ангельскі тэрмін profile для гэтага не зусім дакладны.
У папярэдняй частцы пыталіся пра "geektimes-эфект", звязаны са зменай правілаў аплаты артыкулаў для geektimes з гэтага лета. Вывядзем асобна артыкулы geektimes:
Вынік цікавы. Прыкладныя суадносіны праглядаў артыкулаў geektimes да агульнага недзе 1:5. Але калі агульная колькасць праглядаў прыкметна вагалася, то прагляд "забаўляльных" артыкулаў трымаўся прыкладна на адным узроўні.
Таксама можна заўважыць, што агульная колькасць праглядаў артыкулаў раздзела "geektimes" пасля змены правіл усё ж звалілася, але "на вока", не больш чым на 5% ад агульных значэнняў.
Цікава паглядзець сярэднюю колькасць праглядаў на артыкул:
Для "забаўляльных" артыкулаў яно прыкладна на 40% вышэй сярэдняга. Мусіць, гэта нядзіўна. Правал у пачатку красавіка мне незразумелы, можа так і было, ці гэта нейкая памылка парсінгу, а можа нехта з аўтараў geektimes сышоў у адпачынак ;).
Дарэчы, на графіцы бачныя яшчэ два прыкметныя пікі колькасці праглядаў артыкулаў — навагоднія і майскія святы.
Хабы
Пяройдзем да абяцанага аналізу хабаў. Вывядзем топ 20 хабаў па колькасці праглядаў:
На здзіўленне, самым папулярным па праглядах аказаўся хаб «Інфармацыйная бяспека», таксама ў топ-5 лідэраў уваходзяць «Праграмаванне» і «Popular science».
Антытоп займае Gtk і Cocoa.
Скажу па сакрэце, топ хабаў таксама можна ўбачыць і тут, хоць колькасць праглядаў там не паказана.
Рэйтынг
І нарэшце, абяцаны рэйтынг. Выкарыстоўваючы дадзеныя аналізу хабаў, мы можам вывесці самыя папулярныя артыкулы па самых папулярных хабах за гэты 2019 год.
І нарэшце, каб нікому не было крыўдна, прывяду рэйтынг самага маланаведвальнага хаба "gtk". У ім за год была апублікавана адна артыкул, яна ж аўтаматам займае першы радок рэйтынгу.