Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Pan ddaeth Olivier y Flwyddyn Newydd i ben, doedd gen i ddim byd i'w wneud, a phenderfynais lawrlwytho'r holl erthyglau o Habrahabr (a llwyfannau cysylltiedig) i'm cyfrifiadur ac archwilio.

Cafwyd sawl stori ddifyr. Y cyntaf ohonynt yw datblygiad fformat a phynciau erthyglau dros y 12 mlynedd o fodolaeth y wefan. Er enghraifft, mae dynameg rhai pynciau yn eithaf dangosol. Parhad - o dan y toriad.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Proses dosrannu

Er mwyn deall sut y datblygodd Habr, roedd angen mynd trwy ei holl erthyglau a thynnu meta-wybodaeth ohonynt (er enghraifft, dyddiadau). Roedd y ffordd osgoi yn hawdd, oherwydd mae dolenni i bob erthygl yn edrych fel "habrahabr.ru/post/337722/", ac mae'r niferoedd yn cael eu rhoi mewn trefn gaeth. Gan wybod bod gan y post diwethaf rif ychydig yn llai na 350 mil, es i trwy'r holl ID dogfen posib mewn dolen (cod Python):

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

Swyddogaeth download_document yn ceisio llwytho'r dudalen gyda'r id cyfatebol ac yn ceisio tynnu gwybodaeth ystyrlon o'r strwythur html.

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)

Yn y broses o ddosrannu, darganfyddais sawl peth newydd.

Yn gyntaf, maen nhw'n dweud bod creu mwy o brosesau nag sydd o greiddiau yn y prosesydd yn ddiwerth. Ond yn fy achos i, daeth i'r amlwg nad y prosesydd yw'r adnodd cyfyngu, ond y rhwydwaith, ac mae 100 o brosesau'n gweithio'n gyflymach na 4 neu, dyweder, 20.

Yn ail, mewn rhai postiadau roedd cyfuniadau o nodau arbennig - er enghraifft, canmoliaethau fel "%&#@". Mae'n troi allan hynny html.parser, a ddefnyddiais gyntaf, yn ymateb i'r cyfuniad &# yn boenus, gan ei ystyried yn ddechrau'r endid html. Roeddwn eisoes yn mynd i wneud hud du, ond awgrymodd y fforwm y gallwch chi newid y parser.

Yn drydydd, llwyddais i ddadlwytho pob cyhoeddiad, heblaw am dri. Cafodd dogfennau rhif 65927, 162075, a 275987 eu dileu ar unwaith gan fy gwrthfeirws. Erthyglau yw'r rhain, yn y drefn honno, am gadwyn javascript sy'n lawrlwytho pdf maleisus, meddalwedd ransom SMS ar ffurf set o ategion porwr, a gwefan CrashSafari.com sy'n anfon iPhones i ailgychwyn. Antivirus darganfod erthygl arall yn ddiweddarach, yn ystod sgan system: post 338586 am sgriptiau ar y wefan siop anifeiliaid anwes sy'n defnyddio prosesydd y defnyddiwr i mwyngloddio cryptocurrency. Felly gallwn ystyried bod gwaith y gwrthfeirws yn eithaf digonol.

"Byw" erthyglau drodd allan i fod dim ond hanner yr uchafswm posibl - 166307 darn. Ynglŷn â'r gweddill, mae Habr yn rhoi opsiynau "mae'r dudalen wedi dyddio, wedi'i dileu neu nid oedd yn bodoli o gwbl." Wel, gall unrhyw beth ddigwydd.

Dilynwyd llwytho erthyglau gan waith technegol: er enghraifft, bu'n rhaid trosi dyddiadau cyhoeddi o'r fformat "'21 Rhagfyr 2006 am 10:47 am" i'r safon datetime, a "12,8k" golygfeydd - yn 12800. Ar yr adeg hon, daeth ychydig mwy o ddigwyddiadau allan. Mae'r un mwyaf doniol yn ymwneud â chyfrif pleidleisiau a mathau o ddata: roedd gan rai o'r hen swyddi orlifiad mewnol a chawsant 65535 o bleidleisiau yr un.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

O ganlyniad, cymerodd testunau erthyglau (heb luniau) 1.5 gigabeit i mi, sylwadau gyda meta-wybodaeth - 3 arall, a thua cant megabeit - meta-wybodaeth am erthyglau. Gellir cadw hyn yn gyfan gwbl mewn RAM, a oedd yn syndod pleserus i mi.

Dechreuais y dadansoddiad o erthyglau nid o'r testunau eu hunain, ond o feta-wybodaeth: dyddiadau, tagiau, canolbwyntiau, golygfeydd a hoff bethau. Mae'n troi allan y gallai hi ddweud llawer.

Tueddiadau Datblygu Habrahabr

Mae erthyglau ar y safle wedi'u cyhoeddi ers 2006; fwyaf dwys - yn 2008-2016.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Nid yw mor hawdd i'w asesu pa mor weithredol y darllenwyd yr erthyglau hyn ar wahanol adegau. Derbyniodd testunau o 2012 ac iau fwy o sylwadau a sgôr, ond mae gan destunau mwy newydd fwy o safbwyntiau a nodau tudalen. Roedd y metrigau hyn yn ymddwyn yr un ffordd (haneru) unwaith yn unig, yn 2015. Efallai, mewn sefyllfa o argyfwng economaidd a gwleidyddol, fod sylw darllenwyr wedi symud o flogiau TG i faterion mwy poenus.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Yn ogystal â'r erthyglau eu hunain, fe wnes i lawrlwytho mwy o sylwadau iddyn nhw. Cafwyd 6 miliwn o sylwadau, fodd bynnag, gwaharddwyd 240 mil ohonynt ("hedfan UFO i mewn a chyhoeddi'r arysgrif yma"). Nodwedd ddefnyddiol o sylwadau yw bod ganddynt stamp amser. Trwy astudio amser sylwadau, gallwch chi ddeall yn fras pryd mae erthyglau'n cael eu darllen o gwbl.

Daeth i'r amlwg bod y rhan fwyaf o'r erthyglau wedi'u hysgrifennu a bod sylwadau arnynt yn rhywle rhwng 10 am ac 20 pm, h.y. ar ddiwrnod gwaith arferol ym Moscow. Gall hyn olygu bod Habr yn cael ei ddarllen at ddibenion proffesiynol, a bod hyn yn ffordd dda o oedi yn y gwaith. Gyda llaw, mae'r dosbarthiad hwn o'r amser yn sefydlog o sylfaen Habr hyd heddiw.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Fodd bynnag, nid yr amser o'r dydd yw prif fantais stamp amser sylw, ond hyd "bywyd actif" yr erthygl. Cyfrifais sut mae'r amser yn cael ei ddosbarthu o gyhoeddi'r erthygl i'w sylw. Daeth i'r amlwg bod y sylw canolrifol (llinell werdd) bellach yn dod mewn tua 20 awr, h.y. ar y diwrnod cyntaf ar ôl cyhoeddi, ar gyfartaledd, mae ychydig mwy na hanner yr holl sylwadau ar yr erthygl ar ôl. Ac mewn dau ddiwrnod maen nhw'n gadael 75% o'r holl sylwadau. Ar yr un pryd, darllenwyd erthyglau cynharach hyd yn oed yn gyflymach - er enghraifft, yn 2010, daeth hanner y sylwadau yn ystod y 6 awr gyntaf.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Daeth yn syndod i mi fod sylwadau wedi ymestyn: mae nifer cyfartalog y cymeriadau mewn sylw bron wedi dyblu dros oes Habr!

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Mae adborth haws na sylwadau yn bleidleisiau. Yn wahanol i lawer o adnoddau eraill, ar Habré gallwch chi roi nid yn unig manteision, ond hefyd anfanteision. Fodd bynnag, nid yw darllenwyr yn defnyddio’r cyfle olaf mor aml: mae cyfran bresennol y cas bethau tua 15% o’r holl bleidleisiau a fwriwyd. Arferai fod mwy, ond dros amser, mae darllenwyr wedi dod yn fwy caredig.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Mae'r testunau eu hunain wedi newid dros amser. Er enghraifft, nid yw hyd nodweddiadol y testun yn stopio tyfu'n gyson o lansiad y wefan, er gwaethaf yr argyfyngau. Mewn degawd, mae testunau bron ddeg gwaith yn hirach!

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Newidiodd arddull y testunau (i frasamcan cyntaf) hefyd. Yn ystod blynyddoedd cyntaf bodolaeth Habr, er enghraifft, cynyddodd y gyfran o god a rhifau mewn testunau:

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Ar ôl deall dynameg cyffredinol y wefan, penderfynais fesur sut y newidiodd poblogrwydd gwahanol bynciau. Gellir dewis pynciau yn awtomatig o destunau, ond i ddechrau, ni allwch ailddyfeisio'r olwyn, ond defnyddiwch dagiau parod wedi'u gosod gan awduron pob erthygl. Rwyf wedi llunio pedwar tueddiad nodweddiadol ar y siart. Roedd y thema "Google" yn dominyddu i ddechrau (efallai yn bennaf oherwydd SEO), ond mae wedi bod yn colli pwysau dros y blynyddoedd. Mae Javascript wedi bod yn bwnc poblogaidd ac mae'n parhau i dyfu'n araf, ond dim ond yn ystod y blynyddoedd diwethaf y mae dysgu peirianyddol wedi dechrau ennill poblogrwydd yn gyflym. Mae Linux, ar y llaw arall, wedi aros yr un mor berthnasol trwy gydol y degawd.

Sut wnes i ddosrannu Habr, rhan 1: tueddiadau

Wrth gwrs, dechreuais ymddiddori ym mha bynciau sy'n denu mwy o weithgarwch darllenwyr. Cyfrifais ganolrif nifer y safbwyntiau, y pleidleisiau a'r sylwadau ym mhob pwnc. Dyma beth ddigwyddodd:

  • Y pynciau yr edrychir arnynt fwyaf: arduino, dylunio gwe, datblygu gwe, crynhoad, dolenni, css, html, html5, nginx, algorithmau.
  • Y pynciau mwyaf "hoffi": vkontakte, hiwmor, jquery, opera, c, html, datblygu gwe, html5, css, dylunio gwe.
  • Y pynciau a drafodwyd fwyaf: opera, skype, llawrydd, vkontakte, ubuntu, gwaith, nokia, nginx, arduino, firefox.

Gyda llaw, gan fy mod i'n cymharu pynciau, gallwch chi eu rhestru yn ôl amlder (a chymharu'r canlyniadau â erthygl debyg o 2013).

  • Am holl flynyddoedd bodolaeth Habr, y tagiau mwyaf poblogaidd (mewn trefn ddisgynnol) yw google, android, javascript, microsoft, linux, php, apple, java, python, rhaglennu, cychwyniadau, datblygu, ios, cychwyn, rhwydweithiau cymdeithasol
  • Yn 2017, y rhai mwyaf poblogaidd oedd javascript, python, java, android, datblygu, linux, c ++, rhaglennu, php, c#, ios, dysgu peiriant, diogelwch gwybodaeth, microsoft, react

Wrth gymharu'r graddfeydd hyn, gellir talu sylw, er enghraifft, i orymdaith fuddugol Python a difodiant php, neu i "machlud" pynciau cychwyn a chynnydd dysgu peiriant.

Nid oes gan bob tag ar Habré liw thematig mor amlwg. Er enghraifft, dyma ddwsin o dagiau a gyfarfu unwaith yn unig, ond yn ymddangos yn ddoniol i mi. Felly: "syniad yw grym gyrru'r cynnydd", "cist o ddelwedd disg hyblyg", "Talaith Iowa", "drama", "superalesh", "injan stêm", "pethau i'w gwneud ddydd Sadwrn", "mae gen i llwynog mewn grinder cig", "a mae'n troi allan fel bob amser", "ni allem feddwl am dagiau doniol". Er mwyn pennu pwnc erthyglau o'r fath, nid yw tagiau'n ddigon - bydd yn rhaid i chi wneud modelu thematig ar destunau'r erthyglau.

Bydd dadansoddiad manylach o gynnwys yr erthyglau yn y post nesaf. Yn gyntaf, rydw i'n mynd i adeiladu model sy'n rhagweld nifer y golygfeydd tudalennau ar gyfer erthygl yn seiliedig ar ei gynnwys. Yn ail, rwyf am ddysgu'r rhwydwaith niwral i gynhyrchu testunau yn yr un arddull ag awduron Habr. Felly tanysgrifiwch 🙂

PS A dyma'r bîp set ddata.

Ffynhonnell: hab.com