Si e parse Habr, pjesa 1: trendet

Kur u mbarua sallata e Vitit të Ri, nuk kisha çfarë të bëja dhe vendosa të shkarkoja të gjitha artikujt nga Habrakhbra (dhe platforma të ngjashme) në kompjuterin tim dhe t'i hulumtoja.

U krijuan disa tregime interesante. Tregimi i parë është zhvillimi i formatit dhe tematikës së artikujve gjatë 12 viteve të ekzistencës së sitit. Për shembull, dinamika e disa temave është mjaft e dukshme. Vazhdimi është poshtë.

Si e parse Habr, pjesa 1: trendet

Procesi i analizës

Për të kuptuar se si u zhvillua Habr, duhej të kalonim për të gjithë artikujt e tij dhe të nxirrnim nga ata metainformacionin (p.sh., datat). Kalimi ishte i lehtë, sepse lidhjet për të gjithë artikujt kanë formën "habrahabr.ru/post/337722/", ndërsa numrat caktohen në rend të rregullt. Duke e ditur që postimi i fundit ka një numër pak më të vogël se 350 mijë, thjesht kalova përmes të gjithë id-ve të mundshme të dokumenteve në një cikël (kod në Python):

import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
    docs = p.map(download_document, np.arange(350000))

Funksioni download_document përdor për të shkarkuar faqen me id përkatëse dhe përpiqet të nxjerrë nga struktura html informacionin përmbajtësor.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Shkarko dhe përpunoni një dokument Habr dhe komentet e tij """
    # shkarkimi i dokumentit
    r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
    # analizimi i dokumentit
    soup = BeautifulSoup(r.text, 'html5lib') # përfitoj nga html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # kjo ndodh nëse artikulli nuk ekziston ose është fshirë
        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
        # krijoni fusha të tjera: qendra, etiketat, shikimet, komentet, votat, etj.
        # ...
    # ruajtja e rezultatit në një skedë të veçantë
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

Gjatë procesit të analizës, zbulova disa pika të reja.

Së pari, thonë se krijimi i më shumë proceseve se bërthamat në procesor është e panevojshme. Por në rastin tim rezultoi se burimi kufizues është rrjeti, e jo procesori, dhe 100 procese punojnë më shpejt se 4 ose, le të themi, 20.

SĂ« dyti, nĂ« disa poste u gjetĂ«n kombinime simboresh special — pĂ«r shembull, eufemizma tĂ« tilla si "%&#@". Doli se html.parser, qĂ« pĂ«rdora fillimisht, reagon ndaj kombinimit &# me dhimbje, duke e konsideruar atĂ« fillim tĂ« njĂ« entiteti html. QĂ« atĂ«herĂ« kisha menduar tĂ« bĂ«ja magji tĂ« zezĂ«, por nĂ« forum mĂ« sugjeruan se mund tĂ« thjesht ndryshoja parserin.

Së pari, arrita të shkarko të gjitha publikimet, përveç tri veta. Dokumentet me numra 65927, 162075 dhe 275987 u fshin menjëherë nga programi im antivirus. Janë artikuj që trajtojnë për zinxhirin e skripteve JavaScript që ngarkojnë PDF të dëmshëm, një kërkesë SMS në formë të një grupi të plug-in-eve për shfletuesit dhe faqen CrashSafari.com, e cila dërgon iPhone në ri-ngarkim. Një artikull tjetër antivirus zbuloi më vonë, gjatë skanimit të sistemit: posti 338586 që trajton skriptet në faqen e dyqanit të kafshëve, të cilat përdorin procesorin e përdoruesit për të minuar kriptovaluta. Prandaj, mund të themi se puna e antivirusit është mjaft e arsyeshme.

"Artikujt e 'gjallĂ«' ishin vetĂ«m gjysma e maksimumit potencial - 166307 artikuj. PĂ«r tĂ« tjerĂ«t, Habr jep mundĂ«si "faqja Ă«shtĂ« e vjetruar, u fshi ose nuk ka ekzistuar fare". ÇfarĂ« tĂ« them, ndodhin tĂ« tilla.

Pas shkarkimeve të artikujve, pasoi puna teknike: për shembull, datat e publikimit duhej të shndërroheshin nga formati "21 dhjetor 2006 në 10:47" në standardin datetime, dhe "12,8k" shikime në 12800. Në këtë fazë doli një numër tjetër i rasteve të çuditshme. Më i qeshuri lidhet me numërimin e votave dhe llojet e të dhënave: në disa poste të vjetra ndodhi tepricë integeri, dhe ato morën nga 65535 vota.

Si e parse Habr, pjesa 1: trendet

Si rezultat, tekstet e artikujve (pa imazhe) zinin 1.5 gigabajt, komentet me metainformacione - 3 të tjera, dhe rreth njëqind megabajt - metainformacione për artikujt. Kjo mund të mbahet plotësisht në kujtesë, çka ishte një befasi e këndshme për mua.

Analizën e artikujve e fillova jo me tekstet e tyre, por me metainformacionin: datat, etiketat, hubet, shikimet dhe "pëlqimet". Doli se edhe ajo mund të tregojë shumë.

Tendencat e zhvillimit të HabrHabr

Artikujt në faqen janë publikuar që nga viti 2006; më intensivisht - në vitet 2008-2016.

Si e parse Habr, pjesa 1: trendet

Sa aktive janë lexuar këto artikuj në periudha të ndryshme, nuk ka qenë aq e lehtë të vlerësohet. Tekstet e vitit 2012 dhe më të rinjtë ishin komentuar dhe vlerësuar më aktivisht, por tekstet më të reja kanë më shumë shikime dhe shtime në shënime. Këto metrika u portretizuan njësoj (ra në gjysmën e tyre) vetëm një herë, në vitin 2015. Ndoshta, në situatën e krizës ekonomike dhe politike, vëmendja e lexuesve kaloi nga bloget IT te çështje më të dhimbshme.

Si e parse Habr, pjesa 1: trendet

Përveç vetë artikujve, kam shkarkuar edhe komentet e tyre. Numri i komenteve arriti në 6 milionë, megjithatë, 240 mijë prej tyre rezultuan të bllokuara ("një UFO erdhi dhe publikoi këtë shkrim këtu"). Një nga karakteristikat e dobishme të komenteve është se për to është e treguar koha. Duke studiuar kohën e komenteve, mund të kuptoni përreth se kur lexohen artikujt në përgjithësi.

Doli se pjesa më e madhe e artikujve shkruhet dhe komentohet diku nga ora 10 deri në 20, pra gjatë një ditë të zakonshme pune në Moskë. Kjo mund të dojë të thotë se Habr lexohet për qëllime profesionale dhe se është një mënyrë e mirë për të bërë prokrastinim në punë. Për më tepër, ky shpërndarje e kohës së ditës është stabilizuar që nga themelimi i Habr deri në ditët e sotme.

Si e parse Habr, pjesa 1: trendet

MegjithatĂ«, pĂ«rfitimi kryesor nga marka e kohĂ«s sĂ« komentit nuk Ă«shtĂ« koha e ditĂ«s, por periudha e "jetĂ«s aktive" sĂ« artikullit. Kam numĂ«ruar si Ă«shtĂ« shpĂ«rndarĂ« koha nga publikimi i artikullit deri nĂ« komentim. Doli se tani komenti median (vija e gjelbĂ«r) arrin pĂ«r rreth 20 orĂ«, pra nĂ« ditĂ«n e parĂ« pas publikimit lihen mesatarisht pak mĂ« shumĂ« se gjysma e tĂ« gjithĂ« komenteve pĂ«r artikullin. NdĂ«rsa pĂ«r dy ditĂ« lihen 75% e tĂ« gjithĂ« komenteve. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, mĂ« parĂ« artikujt lexoheshin edhe mĂ« shpejt — kĂ«shtu, nĂ« vitin 2010, gjysma e komenteve arrinte tashmĂ« nĂ« 6 orĂ«t e para.

Si e parse Habr, pjesa 1: trendet

Për mua ishte një befasi se komentet u zgjatën: numri mesatar i karaktereve në koment gjatë ekzistencës së Habr u rrit pothuajse dyfish!

Si e parse Habr, pjesa 1: trendet

Një feedback më i thjeshtë se komentet janë votat. Ndryshe nga shumë burime të tjera, në Habr mund të vendosen jo vetëm pëlqime, por edhe mospëlqime. Megjithatë, kjo mundësi e fundit nuk përdoret aq shpesh: pjesa aktuale e mosvotave është rreth 15% e të gjitha votave të dhëna. Më përpara ishte më shumë, por me kalimin e kohës lexuesit janë bërë më të mirë.

Si e parse Habr, pjesa 1: trendet

Po ashtu, tekstet vetë kanë ndryshuar me kalimin e kohës. Për shembull, gjatë gjithë ekzistencës së sitit, gjatësia tipike e tekstit nuk ndalet së rrituri, pavarësisht krizeve. Gjatë një dekade, tekstet u bënë pothuajse dhjetë herë më të gjata!

Si e parse Habr, pjesa 1: trendet

Stili i teksteve (në një qasje fillestare) gjithashtu ndryshoi. Gjatë viteve të para të ekzistencës së Habr, për shembull, u rrit pjesa e kodit dhe numrave në tekste:

Si e parse Habr, pjesa 1: trendet

Pas saqerim për dinamikën e përgjithshme të sitit, vendosa të mas si ka ndryshuar popullariteti i temave të ndryshme. Temat mund të identifikohen automatikisht nga tekstet, por për fillim nuk është e nevojshme të shpikim rrotën, mund të përdorim etiketat e gatshme, të vendosura nga autorët e çdo artikulli. Katër trende tipike i kam paraqitur në grafik. Tema "Google" fillimisht dominoi (ndoshta kryesisht për shkak të optimizimit SEO), por çdo vit humbte pesha. Javascript ishte një temë e njohur dhe vazhdon të jetë gradualisht më popullore, ndërsa mësimi automatik filloi të fitojë popullaritet vetëm vitet e fundit. Linux mbetet po aq i rëndësishëm gjatë gjithë dekadës.

Si e parse Habr, pjesa 1: trendet

Sigurisht, më interesonte të dija se cilat tema tërheqin më shumë aktivitet lexuesish. Kam llogaritur numrin mediano të shikimeve, votimeve dhe komenteve për çdo temë. Ja çfarë doli:

  • Temat mĂ« tĂ« shikuara: arduino, dizajn web, zhvillim web, pĂ«rmbledhje, lidhje, css, html, html5, nginx, algoritme.
  • Temat mĂ« "ngritĂ«se": vk.com, humor, jquery, opera, c, html, zhvillim web, html5, css, dizajn web.
  • Temat mĂ« tĂ« diskutuara: opera, skype, freelancing, vk.com, ubuntu, punĂ«, nokia, nginx, arduino, firefox.

Dhe, duke qenë se po krahasoj tema, mund të bëj një renditje sipas frekuencës (dhe të krahasoj rezultatet me një artikull të ngjashëm nga viti 2013).

  • PĂ«r gjithĂ« vitet e ekzistencĂ«s sĂ« Habra, etiketat mĂ« popullore (nĂ« renditje zbritĂ«se) u bĂ«nĂ« google, android, javascript, microsoft, linux, php, apple, java, python, programim, startup, zhvillim, ios, startup, rrjete sociale.
  • NĂ« vitin 2017, mĂ« tĂ« njohura ishin javascript, python, java, android, zhvillim, linux, c++, programim, php, c#, ios, mĂ«sim automatik, siguria informacionit, microsoft, react.

Duke krahasuar këto renditje, mund të vërejmë, për shembull, marshimin triumfues të Pythonit dhe zhdukjen e php, ose "perëndimin" e tematikës së startup-eve dhe ngritjen e mësimit automatik.

Jo gjithashtu nuk janë të gjithë etiketat në Habr të dukshme me një ngjyrë tematike kaq të qartë. Ja, për shembull, një dhjetë etiketash që janë takuar vetëm një herë, por thjesht më dukeshin qesharake. Pra: "ideja si nxitës i progresit", "ngarkimi nga imazhi i disku", "shteti i Iowa-s", "dramaturgjia", "superaljesha", "motor me avull", "çfarë të bëjmë të shtunën", "kam një lisicë në blender", "dhe përfundoi si gjithmonë", "nuk arrita të shpik ndonjë etiketë qesharake". Për të përcaktuar tematikën e këtyre artikujve, etiketat nuk mjaftojnë - do të duhet të kryejmë modelimin tematik mbi tekstet e artikujve.

NjĂ« analizĂ« mĂ« e detajuar e pĂ«rmbajtjes sĂ« artikujve do tĂ« jetĂ« nĂ« postimin tjetĂ«r. NĂ« radhĂ« tĂ« parĂ«, kam pĂ«r TĂ« ndĂ«rtuar njĂ« model qĂ« parashikon numrin e shikimeve tĂ« artikullit nĂ« varĂ«si tĂ« pĂ«rmbajtjes sĂ« tij. NĂ« tĂ« dytĂ«, do tĂ« doja tĂ« mĂ«soja njĂ« rrjet nervor tĂ« gjeneronte tekste nĂ« tĂ« njĂ«jtĂ«n stilistikĂ« si autorĂ«t e Habr. Pra, abonohuni 🙂

P.S. Ja dhe e koduar dataset.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster