Carane aku parsed Habr, part 1: tren

Nalika Olivier Taun Anyar rampung, aku ora duwe apa-apa, lan aku mutusake kanggo ngundhuh kabeh artikel saka Habrahabr (lan platform sing gegandhengan) menyang komputer lan njelajah.

Ana sawetara crita menarik. Kaping pisanan yaiku pangembangan format lan topik artikel sajrone 12 taun situs kasebut. Contone, dinamika sawetara topik cukup indikatif. Terusake - ing sangisore potong.

Carane aku parsed Habr, part 1: tren

Proses parsing

Kanggo mangerteni carane Habr berkembang, iku perlu kanggo mbukak liwat kabeh artikel lan extract meta-informasi saka wong-wong mau (contone, tanggal). Bypass iku gampang, amarga pranala menyang kabeh artikel katon kaya "habrahabr.ru/post/337722/", lan nomer diwenehi strictly urutan. Ngerti manawa kiriman pungkasan duwe nomer rada kurang saka 350 ewu, aku mung ngliwati kabeh id dokumen sing bisa ditindakake (kode Python):

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

fungsi download_document nyoba mbukak kaca kanthi id sing cocog lan nyoba ngekstrak informasi sing migunani saka struktur 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)

Ing proses parsing, aku nemokake sawetara perkara anyar.

Kaping pisanan, dheweke ujar manawa nggawe proses luwih akeh tinimbang inti ing prosesor ora ana gunane. Nanging ing kasusku, ternyata sumber daya sing mbatesi dudu prosesor, nanging jaringan, lan 100 proses bisa luwih cepet tinimbang 4 utawa, ucapake, 20.

Kapindho, ing sawetara kiriman ana kombinasi karakter khusus - contone, eufemisme kaya "% & # @". Pranyata iku html.parser, kang digunakake pisanan, nanggepi kombinasi &# painfully, considering awal entitas html. Aku wis arep nindakake ilmu ireng, nanging forum disaranake sampeyan mung bisa ngganti parser.

Katelu, aku bisa mbongkar kabeh publikasi, kajaba telung. Dokumen nomer 65927, 162075, lan 275987 langsung dibusak dening antivirusku. Iki minangka artikel, masing-masing, babagan rantai javascript sing ndownload pdf angkoro, SMS ransomware arupa sakumpulan plugin browser, lan situs CrashSafari.com sing ngirim iPhone menyang urip maneh. Antivirus nemokake artikel liyane mengko, sajrone scan sistem: kirim 338586 babagan skrip ing situs web toko pet sing nggunakake prosesor pangguna kanggo mine cryptocurrency. Supaya kita bisa nimbang karya antivirus cukup cekap.

Artikel "Urip" dadi mung setengah saka maksimum potensial - 166307 potongan. Babagan liyane, Habr menehi opsi "kaca kasebut wis ketinggalan jaman, wis dibusak utawa ora ana babar pisan." Inggih, apa wae bisa kelakon.

Pengunggahan artikel diterusake kanthi karya teknis: contone, tanggal publikasi kudu diowahi saka format "'21 Desember 2006 jam 10:47" dadi standar. datetime, lan "12,8k" views - ing 12800. Ing tataran iki, sawetara liyane kedadosan metu. Sing paling lucu ana hubungane karo jumlah swara lan jinis data: sawetara kiriman lawas duwe kebanjiran int lan nampa 65535 swara saben.

Carane aku parsed Habr, part 1: tren

Akibaté, teks artikel (tanpa gambar) njupuk kula 1.5 gigabyte, komentar karo meta-informasi - liyane 3, lan bab satus megabyte - meta-informasi babagan artikel. Iki bisa rampung disimpen ing RAM, kang ana surprise penake kanggo kula.

Aku miwiti analisis artikel ora saka teks dhewe, nanging saka meta-informasi: tanggal, tags, hub, views lan seneng. Pranyata dheweke bisa ngomong akeh.

Tren Pangembangan Habrahabr

Artikel ing situs wis diterbitake wiwit 2006; paling intensif - ing 2008-2016.

Carane aku parsed Habr, part 1: tren

Sepira aktif artikel kasebut diwaca ing wektu sing beda-beda ora gampang ditaksir. Teks saka 2012 lan luwih enom nampa komentar lan rating luwih akeh, nanging teks sing luwih anyar duwe tampilan lan tetenger luwih akeh. Metrik iki tumindak kanthi cara sing padha (dibagi) mung sapisan, ing taun 2015. Mbokmenawa, ing kahanan krisis ekonomi lan politik, perhatian pembaca wis pindah saka blog IT menyang masalah sing luwih lara.

Carane aku parsed Habr, part 1: tren

Saliyane artikel dhewe, aku ndownload komentar liyane kanggo dheweke. Ana 6 yuta komentar, nanging 240 ewu dicekal ("UFO mabur lan nerbitake prasasti iki ing kene"). Properti sing migunani kanggo komentar yaiku duwe cap wektu. Kanthi nyinaoni wektu komentar, sampeyan bisa ngerti babagan nalika artikel diwaca.

Pranyata akeh artikel sing ditulis lan dikomentari ing endi wae saka jam 10 nganti jam 20, yaiku. ing dina kerja khas Moskow. Iki bisa uga ateges Habr diwaca kanggo tujuan profesional, lan iki minangka cara sing apik kanggo nundha ing karya. Miturut cara, distribusi wektu iki stabil saka dhasar Habr nganti saiki.

Carane aku parsed Habr, part 1: tren

Nanging, mupangat utama saka cap wektu komentar dudu wektu, nanging durasi "urip aktif" artikel kasebut. Aku ngitung carane wektu disebarake saka publikasi artikel menyang komentar. Ternyata saiki komentar median (garis ijo) teka kira-kira 20 jam, yaiku. ing dina pisanan sawise publikasi, rata-rata, luwih saka setengah kabeh komentar ing artikel kasebut ditinggalake. Lan ing rong dina dheweke ninggalake 75% kabeh komentar. Ing wektu sing padha, artikel sadurungé diwaca luwih cepet - contone, ing 2010, setengah saka komentar teka ing 6 jam pisanan.

Carane aku parsed Habr, part 1: tren

Iku teka minangka surprise kanggo kula sing komentar wis dawa: jumlah rata-rata karakter ing komentar wis meh tikel kaping pindho liwat umur Habr!

Carane aku parsed Habr, part 1: tren

Umpan balik sing luwih gampang tinimbang komentar yaiku vote. Boten kados kathah sumber daya liyane, ing Habré sampeyan bisa sijine ora mung pluses, nanging uga minuses. Nanging, para pamaca ora kerep nggunakake kesempatan pungkasan: pangsa sing ora disenengi saiki kira-kira 15% saka kabeh suara sing dikirim. Biyen ana liyane, nanging suwe-suwe, sing maca dadi luwih apik.

Carane aku parsed Habr, part 1: tren

Teks-teks kasebut dhewe wis owah saka wektu. Contone, dawa khas teks ora mandheg terus-terusan wiwit diluncurake situs kasebut, sanajan ana krisis. Ing dasawarsa, teks wis meh sepuluh kaping maneh!

Carane aku parsed Habr, part 1: tren

Gaya teks (menyang perkiraan pisanan) uga diganti. Ing taun-taun pisanan ana Habr, contone, bagean kode lan angka ing teks tambah akeh:

Carane aku parsed Habr, part 1: tren

Sawise ngerti dinamika sakabèhé situs, aku mutusaké kanggo ngukur carane popularitas macem-macem topik diganti. Topik bisa kanthi otomatis milih saka teks, nanging kanggo wiwitan, sampeyan ora bisa reinvent setir, nanging nggunakake tag siap-digawe ditempelake dening penulis saben artikel. Aku wis digambar papat tren khas ing grafik. Tema "Google" wiwitane didominasi (bisa uga amarga SEO), nanging wis ilang bobot sajrone pirang-pirang taun. Javascript wis dadi topik sing populer lan terus berkembang alon-alon, nanging machine learning wiwit popularitas kanthi cepet mung ing taun-taun pungkasan. Linux, ing sisih liya, tetep relevan sajrone dekade.

Carane aku parsed Habr, part 1: tren

Mesthi, aku dadi kasengsem ing topik apa sing narik luwih akeh kegiatan maca. Aku ngetung jumlah rata-rata views, votes lan komentar ing saben topik. Mangkene kedadeyane:

  • Topik sing paling dideleng: arduino, desain web, pangembangan web, digest, link, css, html, html5, nginx, algoritma.
  • Topik sing paling "disenengi": vkontakte, humor, jquery, opera, c, html, pangembangan web, html5, css, desain web.
  • Topik sing paling dibahas: opera, skype, freelance, vkontakte, ubuntu, karya, nokia, nginx, arduino, firefox.

Miturut cara, amarga aku mbandhingake topik, sampeyan bisa menehi peringkat kanthi frekuensi (lan mbandhingake asil karo artikel sing padha saka 2013).

  • Kanggo kabeh taun eksistensi Habr, tag sing paling populer (ing urutan mudhun) yaiku google, android, javascript, microsoft, linux, php, apple, java, python, programming, startups, development, ios, startup, social networks.
  • Ing 2017, sing paling populer yaiku javascript, python, java, android, development, linux, c++, programming, php, c#, ios, machine learning, information security, microsoft, react

Nalika mbandingaken ratings iki, siji bisa mbayar manungsa waé, contone, kanggo Maret menang Python lan punah saka php, utawa kanggo "sunset" topik wiwitan lan munggah saka machine learning.

Ora kabeh tag ing Habré duwe warna tematik sing jelas. Contone, ing kene ana puluhan tag sing ketemu mung sapisan, nanging mung katon lucu kanggo aku. Dadi: "gagasan minangka daya pendorong kemajuan", "boot saka gambar floppy disk", "Iowa State", "drama", "superalesh", "mesin uap", "prekara sing kudu ditindakake dina Setu", "Aku duwe rubah ing gilingan meat", "a iku diaktifake metu minangka tansah", "kita ora bisa teka munggah karo tags lucu". Kanggo nemtokake subyek artikel kasebut, tag ora cukup - sampeyan kudu nindakake model tematik ing teks artikel kasebut.

Analisis sing luwih rinci babagan isi artikel bakal ana ing kirim sabanjure. Kaping pisanan, aku bakal nggawe model sing prédhiksi jumlah tampilan kaca kanggo artikel adhedhasar isi. Kapindho, aku pengin ngajar jaringan saraf kanggo ngasilake teks kanthi gaya sing padha karo penulis Habr. So subscribe 🙂

PS Lan iki bip kumpulan data.

Source: www.habr.com

Add a comment