Když jsem dojedl novoroční olivové saláty, neměl jsem co dělat, a rozhodl jsem se stáhnout si na počítač všechny články z Habrhabru (a obdobných platforem) a prozkoumat je.
Vzniklo několik zajímavých námětů. První z nich je vývoj formátu a tematických okruhů článků za 12 let existence webu. Například dynamika některých témat je velmi výmluvná. Pokračování je pod katem.

Proces parsování
Abych pochopil, jak Habr vyvíjel, bylo potřeba projít všechny jeho články a vybrat z nich meta-informace (například data). Procházení bylo snadné, protože odkazy na všechny články mají formát "habrahabr.ru/post/337722/", přičemž čísla jsou zadávána přísně v pořadí. Věděl jsem, že poslední příspěvek má číslo těsně pod 350 tisíci, a tak jsem jednoduše prošel všechny možné id dokumentů cyklem (kód v Pythonu):
import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
docs = p.map(download_document, np.arange(350000))Funkce download_document se pokouší načíst stránku s odpovídajícím id a pokusí se vytáhnout z struktury html podstatné informace.
import requests
from bs4 import BeautifulSoup
def download_document(pid):
""" Stáhnout a zpracovat dokument z Habr a jeho komentáře """
# stažení dokumentu
r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
# parsování dokumentu
soup = BeautifulSoup(r.text, 'html5lib') # místo html.parser
doc = {}
doc['id'] = pid
if not soup.find("span", {"class": "post__title-text"}):
# to se stává, pokud článek neexistoval nebo byl smazán
doc['status'] = 'title_not_found'
else:
doc['status'] = 'ok'
doc['title'] = soup.find("span", {"class": "post__title-text"}).text
doc['text'] = soup.find("div", {"class": "post__text"}).text
doc['time'] = soup.find("span", {"class": "post__time"}).text
# vytvořit další pole: huby, tagy, zobrazení, komentáře, hlasy, atd.
# ...
# uložení výsledku do samostatného souboru
fname = r'files/' + str(pid) + '.pkl'
with open(fname, 'wb') as f:
pickle.dump(doc, f)Během parsování jsem objevil několik nových aspektů.
Za prvé, říkají, že vytvářet více procesů, než je jader v procesoru, je zbytečné. Ale v mém případě se ukázalo, že limitujícím zdrojem není procesor, ale síť, a 100 procesů funguje rychleji než 4 nebo, dejme tomu, 20.
Za druhé, v některých příspěvcích se objevovaly kombinace speciálních znaků — například eufemismy typu "%&#@". Ukázalo se, že html.parser, který jsem nejprve použil, reaguje na kombinaci &# bolestně, považuje ji za začátek html entity. Už jsem byl připraven provádět černou magii, ale na fóru mi poradili, že stačí změnit parser.
Za třetí, podařilo se mi stáhnout všechny publikace kromě tří. Doklady s čísly 65927, 162075 a 275987 okamžitě smazal můj antivirus. Jde o články o řetězci JavaScriptů, který načítá zavirované PDF, SMS vyděrače ve formě sad pluginů pro prohlížeče a web CrashSafari.com, který resetuje iPhony. Další článek antivirus zjistil později během skenování systému: příspěvek 338586 o skriptech na webu zverimexu, které využívají procesor uživatele pro těžbu kryptoměny. Takže můžeme považovat práci antiviru za zcela adekvátní.
"Živých" článků se ukázalo být jen polovina od potenciálního maxima – 166307 kousků. K ostatním Habr poskytuje možnosti "stránka je zastaralá, byla odstraněna nebo vůbec neexistovala". Nuže, stává se.
Po stažení článků následovala technická práce: například data publikace bylo třeba převést z formátu "21. prosince 2006 v 10:47" do standardního datetime, a "12,8k" zhlédnutí – na 12800. V této fázi se objevilo ještě několik kuriozit. Nejveselejší se týká počítání hlasů a typů dat: u některých starších příspěvků došlo k přetečení int a obdržely 65535 hlasů.

V důsledku toho texty článků (bez obrázků) zabraly 1,5 gigabajtu, komentáře s meta informacemi – dalších 3 gigabajty, a kolem sta megabajtů – meta informace o článcích. To lze plně udržet v operační paměti, což pro mě bylo příjemným překvapením.
Začal jsem analýzu článků nikoli s texty, ale s meta informacemi: daty, tagy, huby, zhlédnutími a "lajky". Ukázalo se, že i to může mnoho prozradit.
Trendy vývoje HabrHabra
Články na webu se publikují od roku 2006; nejintenzivněji v letech 2008-2016.

Hodnotit, jak aktivně byly tyto články čteny v různých obdobích, není tak jednoduché. Texty z roku 2012 a mladší byly aktivněji komentovány a hodnoceny, ale novější texty mají více zhlédnutí a přidání do záložek. Tyto metriky se chovaly stejně (dvakrát klesly) pouze jednou, v roce 2015. Je možné, že v situaci ekonomické a politické krize se pozornost čtenářů přesunula z IT blogů k bolestivějším otázkám.

Kromě samotných článků jsem stáhl také komentáře k nim. Komentářů vzniklo 6 milionů, bohužel 240 tisíc z nich bylo zabanováno ("UFO přistálo a zveřejnilo tuto zprávu zde"). Užitečná vlastnost komentářů je, že mají uvedený čas. Zkoumáním času komentářů je možné přibližně pochopit, kdy články lidé čtou.
Ukázalo se, že většina článků je psána a komentována přibližně od 10 do 20 hodin, tedy v typický pracovní den v Moskvě. To může znamenat, že Habr čtou za profesními účely, a že je to dobrý způsob, jak prokrastinovat v práci. Mimochodem, toto rozložení denní doby je stabilní od založení Habra až do dnešního dne.

Hlavní užitek z časového označení komentáře však není v denní době, ale v období "aktivního života" článku. Spočítal jsem, jak je rozloženo časové období od publikace článku do jeho komentáře. Ukázalo se, že nyní mediánový komentář (zelená linie) přichází přibližně po 20 hodinách, tedy v prvním dni po publikaci je průměrně ponecháno něco málo přes polovinu všech komentářů k článku. A během dvou dnů zanechává 75 % všech komentářů. Dříve však články četli ještě rychleji – například v roce 2010 polovina komentářů přišla již v prvních 6 hodinách.

Byl jsem překvapen, že komentáře se prodloužily: průměrný počet znaků v komentáři od vzniku Habra vzrostl skoro dvakrát!

Jednodušší zpětná vazba než komentáře jsou hlasy. Na rozdíl od mnoha jiných zdrojů, na Habru můžete dávat nejen palce nahoru, ale také dolů. Nicméně této poslední možnosti čtenáři nevyužívají tolik často: aktuální podíl negativních hodnocení činí přibližně 15 % ze všech odevzdaných hlasů. Dříve bylo více, ale s časem se čtenáři stali laskavějšími.

O čase se také měnily samotné texty. Například typická délka textu nepřestává stabilně růst od spuštění webu, navzdory krizím. Za desetiletí se texty staly skoro desetkrát delšími!

Styl textů (v prvním přiblížení) se také měnil. V prvních letech existence Habra například vzrostl podíl kódu a čísel v textech:

Po prostudování celkové dynamiky webu jsem se rozhodl změřit, jak se měnila popularita různých témat. Témata lze automaticky vynášet z textů, ale pro začátek není nutné vymýšlet kolo, stačí využít hotové značky, které nastavili autoři jednotlivých článků. Čtyři typické trendy jsem zobrazil v grafu. Téma "Google" původně dominovalo (snad hlavně díky SEO optimalizaci), ale s každým rokem ztrácelo na váze. Javascript byl populárním tématem a postupně zůstává na vzestupu, zatímco strojové učení začalo rychle nabírat na popularitě až v posledních letech. Linux zůstává stálý a relevantní po celé desetiletí.

Samozřejmě mě zajímalo, jaká témata přitahují nejvíce čtenářské aktivity. Spočítal jsem medián počtu zhlédnutí, hlasů a komentářů u každého tématu. Tady jsou výsledky:
- Nejvíce sledovaná témata: arduino, webdesign, webový vývoj, digest, odkazy, css, html, html5, nginx, algoritmy.
- Nejvíce "lajkovaná" témata: vk, humor, jquery, opera, c, html, webový vývoj, html5, css, webdesign.
- Nejvíce diskutovaná témata: opera, skype, freelancing, vk, ubuntu, práce, nokia, nginx, arduino, firefox.
Mimochodem, když už srovnávám témata, mohu vytvořit jejich hodnocení podle frekvence (a porovnat výsledky s ).
- Za celou dobu existence Habra se nejpopulárnějšími značkami (v pořadí od nejvyššího) staly google, android, javascript, microsoft, linux, php, apple, java, python, programování, startupy, vývoj, ios, startup, sociální sítě.
- V roce 2017 byly nejpopulárnější javascript, python, java, android, vývoj, linux, c++, programování, php, c#, ios, strojové učení, informační bezpečnost, microsoft, react.
Při porovnávání těchto hodnocení lze věnovat pozornost například vítěznému postupu Pythonu a vymírání php, nebo "západu" startupové tematiky a vzestupu strojového učení.
Ne všechny tagy na Habr mají tak zřejmou tematickou barvu. Zde je například deset tagů, které se objevily pouhý jednou, ale přišly mi zábavné. Takže: "myšlenka hnaná pokrokem", "bootování z obrazu disket", "stát Iowa", "dramaturgie", "super Aleša", "parní motor", "co dělat v sobotu", "mám lišku v mlýnku na maso", "a dopadlo to jako vždy", "nejdou vymyslet vtipné tagy". K určení tématu takových článků tagy nestačí — je třeba provést tematické modelování na textech článků.
Podrobnější analýza obsahu článků bude v příštím příspěvku. Za prvé, jsem odhodlán vytvořit model, který předpovídá počet zhlédnutí článku podle jeho obsahu. Za druhé, chtěl bych naučit neuronovou síť generovat texty ve stejném stylu, jaké mají autoři Habu. Tak se přihlaste k odběru 🙂
P.S. A tady je zapiklené .
Zdroj: habr.com
