Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Sa dihang nahuman na ang Olivier sa Bag-ong Tuig, wala koy mahimo, ug nakahukom ko nga i-download ang tanang artikulo gikan sa Habrahabr (ug may kalabutan nga mga plataporma) ngadto sa akong kompyuter ug magsuhid.

Adunay daghang makapaikag nga mga istorya. Ang una niini mao ang pagpalambo sa format ug mga hilisgutan sa mga artikulo sulod sa 12 ka tuig sa paglungtad sa site. Pananglitan, ang dynamics sa pipila ka mga hilisgutan medyo nagpaila. Pagpadayon - ubos sa pagputol.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Proseso sa pag-parse

Aron masabtan kung giunsa pag-uswag ni Habr, kinahanglan nga susihon ang tanan niyang mga artikulo ug makuha ang meta-impormasyon gikan kanila (pananglitan, mga petsa). Sayon ra ang bypass, tungod kay ang mga link sa tanan nga mga artikulo sama sa "habrahabr.ru/post/337722/", ug ang mga numero gihatag sa estrikto nga pagkahan-ay. Nahibal-an nga ang katapusan nga post adunay usa ka numero nga wala’y gamay sa 350 ka libo, gisusi nako ang tanan nga posible nga dokumento id sa usa ka loop (Python code):

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

function download_document misulay sa pagkarga sa panid sa katugbang nga id ug naningkamot sa pagkuha sa makahuluganon nga impormasyon gikan sa html structure.

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)

Sa proseso sa pag-parse, nadiskobrehan nako ang daghang bag-ong mga butang.

Una, giingon nila nga wala’y kapuslanan ang paghimo og daghang mga proseso kaysa adunay mga cores sa processor. Apan sa akong kaso, nahimo nga ang limitado nga kapanguhaan dili ang processor, apan ang network, ug ang 100 nga mga proseso molihok nga mas paspas kaysa 4 o, ingnon ta, 20.

Ikaduha, sa pipila ka mga post adunay mga kombinasyon sa mga espesyal nga karakter - pananglitan, mga euphemism sama sa "%&#@". Kini nahimo nga html.parser, nga una nakong gigamit, nag-react sa kombinasyon &# masakit, naghunahuna nga kini ang sinugdanan sa html entity. Mobuhat na unta ko og black magic, pero ang forum misugyot nga pwede ra nimo usbon ang parser.

Ikatulo, nadiskarga nako ang tanang publikasyon, gawas sa tulo. Ang mga dokumento nga may numero nga 65927, 162075, ug 275987 gitangtang dayon sa akong antivirus. Kini ang mga artikulo, sa tinuud, bahin sa usa ka kadena sa javascript nga nag-download sa usa ka malisyoso nga pdf, SMS ransomware sa porma sa usa ka hugpong sa mga plugin sa browser, ug ang site sa CrashSafari.com nga nagpadala sa mga iPhone sa usa ka reboot. Nadiskobrehan sa Antivirus ang laing artikulo sa ulahi, atol sa pag-scan sa sistema: post 338586 mahitungod sa mga script sa website sa pet store nga naggamit sa processor sa user sa pagmina sa cryptocurrency. Mao nga mahunahuna namon nga ang trabaho sa antivirus igo na.

Ang "Live" nga mga artikulo nahimo nga katunga lamang sa potensyal nga maximum - 166307 ka piraso. Mahitungod sa uban, si Habr naghatag og mga kapilian "ang panid wala na sa panahon, natangtang na o wala gyud." Aw, bisan unsa mahimong mahitabo.

Ang pag-upload sa mga artikulo gisundan sa teknikal nga trabaho: pananglitan, ang mga petsa sa publikasyon kinahanglang i-convert gikan sa format nga "'21 December 2006 at 10:47 am" ngadto sa standard datetime, ug "12,8k" nga pagtan-aw - sa 12800. Niini nga yugto, pipila pa nga mga insidente ang migawas. Ang labing kataw-anan adunay kalabotan sa mga ihap sa boto ug mga tipo sa datos: pipila ka mga karaan nga post adunay int overflow ug nakadawat 65535 nga mga boto matag usa.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Ingon nga resulta, ang mga teksto sa mga artikulo (nga walay mga hulagway) mikuha kanako og 1.5 gigabytes, mga komento nga adunay meta-information - laing 3, ug mga usa ka gatos ka megabytes - meta-information mahitungod sa mga artikulo. Mahimo kini nga hingpit nga tipigan sa RAM, nga usa ka makapahimuot nga sorpresa alang kanako.

Gisugdan nako ang pagtuki sa mga artikulo dili gikan sa mga teksto mismo, apan gikan sa meta-impormasyon: mga petsa, tag, hub, pagtan-aw ug gusto. Daghan siyag masulti.

Mga Trend sa Pag-uswag sa Habrahabr

Ang mga artikulo sa site gipatik sukad sa 2006; labing intensive - sa 2008-2016.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Kung unsa ka aktibo kining mga artikuloha nga gibasa sa lain-laing mga panahon dili sayon ​​​​sa pagsusi. Ang mga teksto gikan sa 2012 ug mas bata nakadawat og daghang mga komento ug mga rating, apan ang mas bag-ong mga teksto adunay daghang mga pagtan-aw ug mga bookmark. Kini nga mga sukatan naglihok sa parehas nga paagi (gitunga) kausa ra, sa 2015. Tingali, sa usa ka sitwasyon sa krisis sa ekonomiya ug politika, ang atensyon sa mga magbabasa nabalhin gikan sa IT blogs ngadto sa mas sakit nga mga isyu.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Dugang pa sa mga artikulo mismo, nag-download ako og daghang mga komento ngadto kanila. Adunay 6 ka milyon nga mga komento, bisan pa, 240 ka libo niini ang gidili ("usa ka UFO milupad ug gipatik kini nga inskripsiyon dinhi"). Usa ka mapuslanon nga kabtangan sa mga komentaryo mao nga sila adunay usa ka time stamp. Pinaagi sa pagtuon sa oras sa mga komento, halos masabtan nimo kung gibasa ang mga artikulo.

Nahibal-an nga kadaghanan sa mga artikulo parehas nga gisulat ug gikomento sa usa ka lugar gikan sa 10 am hangtod 20 pm, i.e. sa kasagaran nga adlaw sa pagtrabaho sa Moscow. Kini mahimong magpasabot nga ang Habr gibasa alang sa propesyonal nga mga katuyoan, ug nga kini usa ka maayong paagi sa paglangay-langay sa trabaho. Pinaagi sa dalan, kini nga pag-apod-apod sa oras sa adlaw lig-on gikan sa pundasyon sa Habr hangtod karon.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Bisan pa, ang panguna nga kaayohan sa usa ka timestamp sa komento dili ang oras sa adlaw, apan ang gidugayon sa "aktibo nga kinabuhi" sa artikulo. Gikalkulo nako kung giunsa ang pag-apod-apod sa oras gikan sa pagmantala sa artikulo hangtod sa komento niini. Kini nahimo nga karon ang median nga komento (berde nga linya) moabut sa mga 20 ka oras, i.e. sa unang adlaw human sa publikasyon, sa aberids, kapin sa katunga sa tanang komento sa artikulo ang nahibilin. Ug sa duha ka adlaw gibiyaan nila ang 75% sa tanan nga mga komento. Sa parehas nga oras, ang mga naunang artikulo gibasa nga labi ka paspas - pananglitan, kaniadtong 2010, ang katunga sa mga komento miabut sa unang 6 ka oras.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Nakurat ko nga ang mga komentaryo mitaas: ang kasagaran nga gidaghanon sa mga karakter sa usa ka komentaryo halos midoble sa tibuok kinabuhi ni Habr!

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Ang mas dali nga feedback kaysa mga komento mao ang mga boto. Dili sama sa daghang uban pang mga kapanguhaan, sa Habré mahimo nimong ibutang dili lamang ang mga plus, apan usab ang mga minus. Bisan pa, ang mga magbabasa dili kanunay mogamit sa katapusan nga oportunidad: ang karon nga bahin sa dili gusto mga 15% sa tanan nga mga boto nga gihatag. Kaniadto daghan pa, apan sa paglabay sa panahon, ang mga magbabasa nahimong mas buotan.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Ang mga teksto mismo nausab sa paglabay sa panahon. Pananglitan, ang kasagaran nga gitas-on sa teksto wala mohunong sa padayon nga pagtubo gikan sa paglansad sa site, bisan pa sa mga krisis. Sa usa ka dekada, ang mga text nahimong halos napulo ka pilo nga mas taas!

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Ang estilo sa mga teksto (sa una nga gibanabana) nausab usab. Sa unang mga tuig sa paglungtad ni Habr, pananglitan, ang bahin sa code ug mga numero sa mga teksto misaka:

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Human masabtan ang kinatibuk-ang dynamics sa site, nakahukom ko nga sukdon kung giunsa pagbag-o ang pagkapopular sa lainlaing mga hilisgutan. Ang mga hilisgutan mahimong awtomatik nga mapili gikan sa mga teksto, apan alang sa mga nagsugod, dili nimo mabag-o ang ligid, apan gamiton ang andam nga mga tag nga gilakip sa mga tagsulat sa matag artikulo. Gidrowing nako ang upat ka kasagarang uso sa tsart. Ang tema nga "Google" sa sinugdan nagdominar (tingali nag-una tungod sa SEO), apan nawala ang gibug-aton sa daghang mga tuig. Ang Javascript usa ka popular nga hilisgutan ug nagpadayon sa pag-uswag sa hinay-hinay, apan ang pagkat-on sa makina nagsugod sa paspas nga pagkapopular lamang sa bag-ohay nga mga tuig. Ang Linux, sa laing bahin, nagpabilin nga parehas nga may kalabotan sa tibuok dekada.

Giunsa nako pag-parse ang Habr, bahin 1: mga uso

Siyempre, nahimong interesado ako sa unsa nga mga hilisgutan ang nakadani sa dugang nga kalihokan sa magbabasa. Gikalkulo nako ang median nga gidaghanon sa mga pagtan-aw, mga boto ug mga komento sa matag hilisgutan. Ania ang nahitabo:

  • Labing gitan-aw nga mga hilisgutan: arduino, web design, web development, digest, links, css, html, html5, nginx, algorithms.
  • Ang labing "gusto" nga mga hilisgutan: vkontakte, humor, jquery, opera, c, html, web development, html5, css, web design.
  • Ang labing gihisgutan nga mga hilisgutan: opera, skype, freelance, vkontakte, ubuntu, trabaho, nokia, nginx, arduino, firefox.

Pinaagi sa dalan, tungod kay gikumpara nako ang mga hilisgutan, mahimo nimo kini ranggo sa kasubsob (ug itandi ang mga resulta sa susama nga artikulo gikan sa 2013).

  • Sa tanang katuigan sa paglungtad ni Habr, ang pinakasikat nga mga tag (sa descending order) mao ang google, android, javascript, microsoft, linux, php, apple, java, python, programming, startups, development, ios, startup, social networks.
  • Sa 2017, ang pinakasikat mao ang javascript, python, java, android, development, linux, c++, programming, php, c#, ios, machine learning, information security, microsoft, react

Kung itandi kini nga mga rating, mahimo’g hatagan pagtagad, pananglitan, ang madaugon nga martsa sa Python ug ang pagkapuo sa php, o ang "pagsalop sa adlaw" sa mga hilisgutan sa pagsugod ug ang pagtaas sa pagkat-on sa makina.

Dili tanan nga mga tag sa Habré adunay ingon ka klaro nga tematik nga pagkolor. Pananglitan, aniay usa ka dosena nga mga tag nga nahimamat kausa ra, apan ingon kataw-anan alang kanako. Busa: "ideya mao ang nagpalihok nga puwersa sa pag-uswag", "boot gikan sa usa ka floppy disk image", "Iowa State", "drama", "superalesh", "steam engine", "mga butang nga buhaton sa Sabado", "Ako adunay usa ka lobo sa usa ka gilingan sa karne", "a kini nahimo sama sa kanunay", "dili kami makahimo og kataw-anan nga mga tag". Aron mahibal-an ang hilisgutan sa ingon nga mga artikulo, ang mga tag dili igo - kinahanglan nimo nga himuon ang tematik nga modelo sa mga teksto sa mga artikulo.

Ang mas detalyado nga pagtuki sa sulod sa mga artikulo anaa sa sunod nga post. Una, maghimo ko og modelo nga magtagna sa gidaghanon sa mga panid sa panid alang sa usa ka artikulo base sa sulod niini. Ikaduha, gusto nakong itudlo ang neural network sa pagmugna og mga teksto sa samang estilo sa mga tagsulat sa Habr. Kaya nga subscribe 🙂

PS Ug ania ang beep dataset.

Source: www.habr.com

Idugang sa usa ka comment