Kad Jaungada OlivjÄ bija beidzies, man nebija ko darÄ«t, un es nolÄmu lejupielÄdÄt visus rakstus no Habrahabr (un saistÄ«tÄm platformÄm) savÄ datorÄ un izpÄtÄ«t.
Bija vairÄki interesanti stÄsti. Pirmais no tiem ir rakstu formÄta un tÄmu attÄ«stÄ«ba vietnes pastÄvÄÅ”anas 12 gadu laikÄ. PiemÄram, dažu tÄmu dinamika ir visai orientÄjoÅ”a. TurpinÄjums - zem griezuma.
ParsÄÅ”anas process
Lai saprastu, kÄ attÄ«stÄ«jÄs Habrs, bija jÄizlasa visi viÅa raksti un jÄizÅem no tiem metainformÄcija (piemÄram, datumi). ApvedceļŔ bija viegls, jo saites uz visiem rakstiem izskatÄs kÄ "habrahabr.ru/post/337722/", un cipari ir doti stingri secÄ«bÄ. Zinot, ka pÄdÄjÄ ierakstÄ ir skaitlis, kas ir nedaudz mazÄks par 350 tÅ«kstoÅ”iem, es tikko cilpÄ pÄrbaudÄ«ju visu iespÄjamo dokumenta ID (Python kods):
import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
docs = p.map(download_document, np.arange(350000))
Funkcija download_document
mÄÄ£ina ielÄdÄt lapu ar atbilstoÅ”o id un mÄÄ£ina izvilkt jÄgpilnu informÄciju no html struktÅ«ras.
import requests
from bs4 import BeautifulSoup
def download_document(pid):
""" Download and process a Habr document and its comments """
# Š²ŃŠ³ŃŃŠ·ŠŗŠ° Š“Š¾ŠŗŃŠ¼ŠµŠ½ŃŠ°
r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
# ŠæŠ°ŃŃŠøŠ½Š³ Š“Š¾ŠŗŃŠ¼ŠµŠ½ŃŠ°
soup = BeautifulSoup(r.text, 'html5lib') # instead of html.parser
doc = {}
doc['id'] = pid
if not soup.find("span", {"class": "post__title-text"}):
# ŃŠ°ŠŗŠ¾Šµ Š±ŃŠ²Š°ŠµŃ, ŠµŃŠ»Šø ŃŃŠ°ŃŃŃ Š½Šµ ŃŃŃŠµŃŃŠ²Š¾Š²Š°Š»Š° ŠøŠ»Šø ŃŠ“Š°Š»ŠµŠ½Š°
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
# create other fields: hubs, tags, views, comments, votes, etc.
# ...
# ŃŠ¾Ń
ŃŠ°Š½ŠµŠ½ŠøŠµ ŃŠµŠ·ŃŠ»ŃŃŠ°ŃŠ° Š² Š¾ŃŠ“ŠµŠ»ŃŠ½ŃŠ¹ ŃŠ°Š¹Š»
fname = r'files/' + str(pid) + '.pkl'
with open(fname, 'wb') as f:
pickle.dump(doc, f)
ParsÄÅ”anas procesÄ es atklÄju vairÄkas jaunas lietas.
PirmkÄrt, viÅi saka, ka ir bezjÄdzÄ«gi izveidot vairÄk procesu, nekÄ procesorÄ ir kodoli. Bet manÄ gadÄ«jumÄ izrÄdÄ«jÄs, ka ierobežojoÅ”ais resurss ir nevis procesors, bet tÄ«kls, un 100 procesi darbojas ÄtrÄk nekÄ 4 vai, teiksim, 20.
OtrkÄrt, dažos ierakstos bija speciÄlo rakstzÄ«mju kombinÄcijas, piemÄram, eifÄmismi, piemÄram, "%&#@". IzrÄdÄ«jÄs, ka html.parser
, ko izmantoju vispirms, reaÄ£Ä uz kombinÄciju &#
sÄpÄ«gi, uzskatot to par html entÄ«tijas sÄkumu. Es jau grasÄ«jos taisÄ«t melno maÄ£iju, bet forumÄ tika ieteikts, ka var vienkÄrÅ”i mainÄ«t parsÄtÄju.
TreÅ”kÄrt, man izdevÄs izlÄdÄt visas publikÄcijas, izÅemot trÄ«s. Mans antivÄ«russ uzreiz izdzÄsa dokumentus ar numuru 65927, 162075 un 275987. Tie ir attiecÄ«gi raksti par JavaScript Ä·Ädi, kas lejupielÄdÄ Ä¼aunprÄtÄ«gu pdf failu, SMS izspiedÄjvÄ«rusu pÄrlÅ«kprogrammas spraudÅu kopas veidÄ un vietni CrashSafari.com, kas nosÅ«ta iPhone tÄlruÅus atsÄknÄÅ”anai. VÄlÄk, veicot sistÄmas skenÄÅ”anu, antivÄ«russ atklÄja vÄl vienu rakstu: ievietojiet 338586 par mÄjdzÄ«vnieku veikala tÄ«mekļa vietnes skriptiem, kas izmanto lietotÄja procesoru, lai iegÅ«tu kriptovalÅ«tu. TÄtad mÄs varam uzskatÄ«t, ka antivÄ«rusa darbs ir diezgan atbilstoÅ”s.
"Live" raksti izrÄdÄ«jÄs tikai puse no potenciÄlÄ maksimuma - 166307 gab. Par pÄrÄjo Habr sniedz opcijas "lapa ir novecojusi, ir izdzÄsta vai vispÄr nepastÄvÄja". Nu var notikt jebkas.
PÄc rakstu augÅ”upielÄdes sekoja tehnisks darbs: piemÄram, publicÄÅ”anas datumi bija jÄpÄrveido no formÄta "'21 plkst. 2006:10" uz standartu. datetime
, un "12,8 k" skatÄ«jumi ā 12800. Å ajÄ posmÄ atklÄjÄs vÄl daži incidenti. SmieklÄ«gÄkais ir saistÄ«ts ar balsu skaitu un datu veidiem: daži veci ieraksti bija pÄrpildÄ«ti, un katrs saÅÄma 65535 balsis.
RezultÄtÄ rakstu teksti (bez bildÄm) man aizÅÄma 1.5 gigabaitus, komentÄri ar metainformÄciju - vÄl 3 un ap simt megabaitu - metainformÄcija par rakstiem. Å o var pilnÄ«bÄ paturÄt RAM, kas man bija patÄ«kams pÄrsteigums.
Rakstu analÄ«zi sÄku nevis no paÅ”iem tekstiem, bet no metainformÄcijas: datumiem, tagiem, centriem, skatÄ«jumiem un simpÄtijÄm. IzrÄdÄ«jÄs, ka viÅa var daudz pastÄstÄ«t.
Habrahabr attīstības tendences
Raksti vietnÄ ir publicÄti kopÅ” 2006. gada; visintensÄ«vÄk - 2008.-2016.g.
Cik aktÄ«vi Å”ie raksti tika lasÄ«ti dažÄdos laikos, nav tik viegli novÄrtÄt. 2012. gada un jaunÄki teksti saÅÄma vairÄk komentÄru un vÄrtÄjumu, bet jaunÄkiem tekstiem ir vairÄk skatÄ«jumu un grÄmatzÄ«mju. Å ie rÄdÄ«tÄji darbojÄs vienÄdi (samazinÄti uz pusi) tikai vienu reizi ā 2015. gadÄ. IespÄjams, ekonomiskÄs un politiskÄs krÄ«zes situÄcijÄ lasÄ«tÄju uzmanÄ«ba no IT blogiem ir novirzÄ«jusies uz sÄpÄ«gÄkÄm problÄmÄm.
Papildus paÅ”iem rakstiem es lejupielÄdÄju vairÄk komentÄru tiem. KomentÄru bija 6 miljoni, tomÄr 240 tÅ«kstoÅ”i no tiem tika aizliegti ("Iellidoja NLO un publicÄja Å”o uzrakstu Å”eit"). NoderÄ«ga komentÄru Ä«paŔība ir tÄ, ka tiem ir laika zÄ«mogs. IzpÄtot komentÄru laiku, var aptuveni saprast, kad raksti vispÄr tiek lasÄ«ti.
IzrÄdÄ«jÄs, ka lielÄkÄ daļa rakstu ir gan rakstÄ«ti, gan komentÄti kaut kur no 10 lÄ«dz 20, t.i. tipiskÄ Maskavas darba dienÄ. Tas var nozÄ«mÄt, ka Habrs tiek lasÄ«ts profesionÄliem nolÅ«kiem, un tas ir labs veids, kÄ atlikt darbu. Starp citu, Å”is diennakts laika sadalÄ«jums ir stabils no paÅ”iem Habras dibinÄÅ”anas lÄ«dz mÅ«sdienÄm.
TaÄu galvenais komentÄra laikspiedola ieguvums ir nevis diennakts laiks, bet gan raksta "aktÄ«vÄs dzÄ«ves" ilgums. ParÄÄ·inÄju, kÄ sadalÄs laiks no raksta publicÄÅ”anas lÄ«dz tÄ komentÄram. IzrÄdÄ«jÄs, ka tagad mediÄnas komentÄrs (zaÄ¼Ä lÄ«nija) nÄk apmÄram pÄc 20 stundÄm, t.i. pirmajÄ dienÄ pÄc publicÄÅ”anas rakstam tiek atstÄta vidÄji nedaudz vairÄk kÄ puse no visiem komentÄriem. Un divu dienu laikÄ viÅi atstÄj 75% no visiem komentÄriem. TajÄ paÅ”Ä laikÄ agrÄkie raksti tika lasÄ«ti vÄl ÄtrÄk - piemÄram, 2010. gadÄ puse komentÄru nÄca pirmajÄs 6 stundÄs.
Man bija pÄrsteigums, ka komentÄri ir pagarinÄjuÅ”ies: vidÄjais rakstzÄ«mju skaits komentÄrÄ Habr dzÄ«ves laikÄ ir gandrÄ«z dubultojies!
VieglÄka atsauksme nekÄ komentÄri ir balsoÅ”ana. AtŔķirÄ«bÄ no daudziem citiem resursiem, vietnÄ HabrĆ© varat ievietot ne tikai plusus, bet arÄ« mÄ«nusus. Tiesa, pÄdÄjo iespÄju lasÄ«tÄji neizmanto tik bieži: paÅ”reizÄjais nepatiku Ä«patsvars ir aptuveni 15% no visÄm nodotajÄm balsÄ«m. KÄdreiz bija vairÄk, bet laika gaitÄ lasÄ«tÄji kļuvuÅ”i laipnÄki.
PaÅ”i teksti laika gaitÄ ir mainÄ«juÅ”ies. PiemÄram, neraugoties uz krÄ«zÄm, teksta tipiskais garums nebeidz nepÄrtraukti pieaugt no paÅ”as vietnes palaiÅ”anas. Desmitgades laikÄ teksti ir kļuvuÅ”i gandrÄ«z desmit reizes garÄki!
MainÄ«jÄs arÄ« tekstu stils (pirmÄ aptuvenÄ veidÄ). PiemÄram, pirmajos HÄbra pastÄvÄÅ”anas gados tekstos pieauga koda un skaitļu Ä«patsvars:
PÄc vietnes vispÄrÄjÄs dinamikas izpratnes es nolÄmu izmÄrÄ«t, kÄ mainÄ«jÄs dažÄdu tÄmu popularitÄte. TÄmas var tikt atlasÄ«tas automÄtiski no tekstiem, taÄu iesÄkumam var nevis izgudrot riteni no jauna, bet izmantot jau gatavas birkas, kuras piestiprina katra raksta autori. DiagrammÄ esmu uzzÄ«mÄjis Äetras tipiskas tendences. SÄkumÄ dominÄja tÄma "Google" (iespÄjams, galvenokÄrt SEO dÄļ), taÄu gadu gaitÄ tÄ zaudÄ svaru. Javascript ir bijusi populÄra tÄma un turpina lÄnÄm augt, taÄu maŔīnmÄcÄ«Å”anÄs ir sÄkusi strauji iegÅ«t popularitÄti tikai pÄdÄjos gados. No otras puses, Linux ir saglabÄjies vienlÄ«dz aktuÄls visas desmitgades laikÄ.
Protams, sÄku interesÄties, kÄdas tÄmas piesaista lielÄku lasÄ«tÄju aktivitÄti. Es aprÄÄ·inÄju vidÄjo skatÄ«jumu, balsojumu un komentÄru skaitu katrÄ tÄmÄ. LÅ«k, kas notika:
- SkatÄ«tÄkÄs tÄmas: arduino, web dizains, tÄ«mekļa izstrÄde, Ä«ssavilkums, saites, css, html, html5, nginx, algoritmi.
- VisvairÄk "patÄ«k" tÄmas: vkontakte, humors, jquery, opera, c, html, web izstrÄde, html5, css, web dizains.
- VisbiežÄk apspriestÄs tÄmas: opera, skype, ÄrÅ”tata, vkontakte, ubuntu, darbs, nokia, nginx, arduino, firefox.
Starp citu, tÄ kÄ es salÄ«dzinu tÄmas, varat tÄs sarindot pÄc biežuma (un salÄ«dzinÄt rezultÄtus ar
- Visus Habra pastÄvÄÅ”anas gadus populÄrÄkie tagi (dilstoÅ”Ä secÄ«bÄ) ir google, android, javascript, microsoft, linux, php, apple, java, python, programmÄÅ”ana, starta uzÅÄmumi, izstrÄde, ios, startÄÅ”ana, sociÄlie tÄ«kli
- 2017. gadÄ populÄrÄkie bija javascript, python, java, android, izstrÄde, linux, c++, programmÄÅ”ana, php, c#, ios, maŔīnmÄcÄ«Å”anÄs, informÄcijas droŔība, microsoft, react
SalÄ«dzinot Å”os reitingus, var pievÄrst uzmanÄ«bu, piemÄram, Python uzvaras gÄjienam un php iznÄ«kÅ”anai vai startup tÄmu "saulrietam" un maŔīnmÄcÄ«bas uzplaukumam.
Ne visiem HabrĆ© tagiem ir tik acÄ«mredzams tematiskais krÄsojums. PiemÄram, Å”eit ir ducis tagu, kas satikÄs tikai vienu reizi, bet man vienkÄrÅ”i Ŕķita smieklÄ«gi. TÄtad: "ideja ir progresa virzÄ«tÄjspÄks", "sÄknÄÅ”ana no disketes attÄla", "Aiovas Å”tats", "drÄma", "superaleÅ”s", "tvaika dzinÄjs", "darbi sestdienÄ", "man ir lapsa gaļas maŔīnÄ", "a sanÄca kÄ vienmÄr", "nevarÄjÄm izdomÄt smieklÄ«gas birkas". Lai noteiktu Å”Ädu rakstu tÄmu, nepietiek ar tagiem - jums bÅ«s jÄveic rakstu tekstu tematiskÄ modelÄÅ”ana.
SÄ«kÄka rakstu satura analÄ«ze bÅ«s nÄkamajÄ ierakstÄ. PirmkÄrt, es izveidoÅ”u modeli, kas paredz lapas skatÄ«jumu skaitu rakstam, pamatojoties uz tÄ saturu. OtrkÄrt, es vÄlos iemÄcÄ«t neironu tÄ«klam Ä£enerÄt tekstus tÄdÄ paÅ”Ä stilÄ kÄ Habr autori. TÄpÄc abonÄjiet š
PS Un Ŕeit ir pīkstiens
Avots: www.habr.com