Als der Neujahrs-Olivier aufgegessen war, hatte ich nichts mehr zu tun, also beschloss ich, mir alle Artikel von Habrhabr (und Àhnlichen Plattformen) auf meinen Computer herunterzuladen und zu erforschen.
Dabei entstanden einige interessante Themen. Eines davon ist die Entwicklung des Formats und der Themen der Artikel ĂŒber 12 Jahre Bestehen der Website. Zum Beispiel ist die Dynamik einiger Themen ziemlich aufschlussreich. Fortsetzung â nach dem Klick.

Der Parsing-Prozess
Um zu verstehen, wie Habr sich entwickelt hat, musste ich alle seine Artikel durchgehen und deren Metainformationen (zum Beispiel Daten) extrahieren. Die Durchsicht war einfach, da die Links zu allen Artikeln im Format "habrahabr.ru/post/337722/" vorliegen, wobei die Nummern streng aufeinander folgen. Wenn man weiĂ, dass der letzte Post eine Nummer knapp unter 350.000 hat, kann man einfach alle möglichen Dokumenten-IDs in einer Schleife durchgehen (Code in Python):
import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
docs = p.map(download_document, np.arange(350000))Funktion download_document versucht, die Seite mit der entsprechenden ID zu laden und versucht, aus der HTML-Struktur inhaltliche Informationen herauszuziehen.
import requests
from bs4 import BeautifulSoup
def download_document(pid):
""" Dokument und Kommentare von Habr herunterladen und verarbeiten """
# Dokument herunterladen
r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
# Dokument parsen
soup = BeautifulSoup(r.text, 'html5lib') # anstelle von html.parser
doc = {}
doc['id'] = pid
if not soup.find("span", {"class": "post__title-text"}):
# Das kann vorkommen, wenn der Artikel nicht existiert oder gelöscht wurde
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
# andere Felder erstellen: Hubs, Tags, Ansichten, Kommentare, Stimmen usw.
# ...
# Ergebnis in einer separaten Datei speichern
fname = r'files/' + str(pid) + '.pkl'
with open(fname, 'wb') as f:
pickle.dump(doc, f)WĂ€hrend des Parse-Prozesses habe ich einige neue Erkenntnisse gewonnen.
Erstens sagt man, dass es sinnlos ist, mehr Prozesse zu erstellen, als Kerne im Prozessor vorhanden sind. In meinem Fall stellte sich jedoch heraus, dass die limitierende Ressource nicht der Prozessor, sondern das Netzwerk ist, und 100 Prozesse arbeiten schneller als 4 oder sagen wir 20.
Zweitens gab es in einigen Posts Kombinationen von Sonderzeichen â beispielsweise Eufemismen wie "%&#@". Es stellte sich heraus, dass html.parser, den ich zunĂ€chst verwendet habe, empfindlich auf die Kombination reagiert &# , da sie als Beginn einer HTML-EntitĂ€t betrachtet wird. Ich hatte schon vor, schwarze Magie zu praktizieren, aber im Forum wurde mir geraten, den Parser einfach zu wechseln.
Drittens ist es mir gelungen, alle Veröffentlichungen bis auf drei zu exportieren. Die Dokumente mit den Nummern 65927, 162075 und 275987 wurden sofort von meinem Antivirus gelöscht. Diese Artikel handeln entsprechend von einer JavaScript-Kette, die ein schĂ€dliches PDF lĂ€dt, einer SMS-Erpressung in Form von Plug-in-Sets fĂŒr Browser und der Website CrashSafari.com, die iPhones zum Neustart zwingt. Ein weiterer Artikel wurde spĂ€ter vom Antivirus entdeckt, wĂ€hrend des Systemscans: Post 338586 ĂŒber Skripte auf der Website eines ZoogeschĂ€fts, die die CPU des Nutzers zum Krypto-Mining nutzen. So kann man die Arbeit des Antivirus als durchaus angemessen betrachten.
"Lebendige" Artikel stellte sich nur als die HĂ€lfte des möglichen Maximums heraus â 166307 StĂŒck. FĂŒr die anderen gibt Habr alternativ an "Seite ist veraltet, wurde gelöscht oder existierte ĂŒberhaupt nicht". Na ja, das passiert.
Nach dem Export der Artikel folgten technische Arbeiten: beispielsweise mussten die Veröffentlichungsdaten von "â21. Dezember 2006 um 10:47" in das Standardformat umgewandelt werden, datetime, und "12,8k" Aufrufe in 12800. In diesem Stadium traten noch einige weitere KuriositĂ€ten auf. Die lustigste betraf die StimmenzĂ€hlung und Datentypen: In einigen alten Posts kam es zu einem Ăberlauf des Integers, und sie erhielten 65535 Stimmen.

Insgesamt belegten die Texte der Artikel (ohne Bilder) bei mir 1,5 Gigabyte, die Kommentare mit Metainformationen weitere 3, und etwa hundert Megabyte â Metainformationen ĂŒber die Artikel. Solches kann man komplett im Arbeitsspeicher halten, was fĂŒr mich eine angenehme Ăberraschung war.
Ich begann mit der Analyse der Artikel nicht mit den eigentlichen Texten, sondern mit den Metainformationen: Daten, Tags, Hubs, Aufrufe und "Likes". Es stellte sich heraus, dass auch diese viel zu erzÀhlen vermögen.
Entwicklungstrends von HabrHabr
Artikel auf der Website werden seit 2006 veröffentlicht; am intensivsten zwischen 2008 und 2016.

Wie aktiv diese Artikel zu verschiedenen Zeiten gelesen wurden, ist nicht so einfach zu beurteilen. Texte aus dem Jahr 2012 und jĂŒnger wurden aktiver kommentiert und bewertet, aber neuere Texte haben mehr Aufrufe und werden hĂ€ufiger in Lesezeichen gespeichert. Diese Metriken verhielten sich nur einmal gleich (sind halbiert), nĂ€mlich im Jahr 2015. Möglicherweise wandte sich die Aufmerksamkeit der Leser in einer Situation des wirtschaftlichen und politischen Krisens von IT-Blogs zu schmerzhaften Fragen.

Neben den Artikeln habe ich auch die Kommentare dazu extrahiert. Insgesamt gab es 6 Millionen Kommentare, wobei sich herausstellte, dass 240.000 davon gesperrt waren ("ein UFO landete und hinterlieĂ diesen Kommentar hier"). Ein nĂŒtzliches Merkmal der Kommentare ist die Zeitangabe. Durch die Analyse der Zeit der Kommentare kann man grob verstehen, wann die Artikel ĂŒberhaupt gelesen werden.
Es stellte sich heraus, dass die meisten Artikel zwischen 10 und 20 Uhr geschrieben und kommentiert werden, also wĂ€hrend eines typischen Arbeitstags in Moskau. Das könnte bedeuten, dass Habr aus beruflichen GrĂŒnden gelesen wird, oder dass es eine gute Form der Prokrastination wĂ€hrend der Arbeit ist. Ăbrigens ist diese Tageszeitverteilung seit der GrĂŒndung von Habr bis heute stabil.

Der Hauptvorteil der Zeitmarke eines Kommentars besteht jedoch nicht in der Tageszeit, sondern in der "aktiven Lebensdauer" des Artikels. Ich habe berechnet, wie die Zeit von der Veröffentlichung eines Artikels bis zu seinem Kommentar verteilt ist. Es stellte sich heraus, dass der mediane Kommentar (grĂŒne Linie) derzeit etwa 20 Stunden nach Veröffentlichung eintrifft, d.h. an den ersten 24 Stunden werden im Durchschnitt etwas mehr als die HĂ€lfte aller Kommentare zu einem Artikel hinterlassen. Nach zwei Tagen werden 75 % aller Kommentare hinterlassen. FrĂŒher wurden Artikel jedoch sogar noch schneller gelesen â so kamen im Jahr 2010 bereits die HĂ€lfte der Kommentare in den ersten 6 Stunden.

Es war fĂŒr mich eine Ăberraschung, dass die Kommentare lĂ€nger wurden: Die durchschnittliche Anzahl der Zeichen in einem Kommentar ist seit der GrĂŒndung von Habr um fast das Doppelte gestiegen!

Eine einfachere Form des Feedbacks als Kommentare sind die Stimmen. Im Gegensatz zu vielen anderen Plattformen kann man auf Habr nicht nur positives, sondern auch negatives Feedback geben. Allerdings wird die letztere Möglichkeit von den Lesern nicht so hĂ€ufig genutzt: Derzeit liegt der Anteil der Dislikes bei etwa 15 % aller abgegebenen Stimmen. FrĂŒher war es mehr, aber im Laufe der Zeit sind die Leser freundlicher geworden.

Auch die Texte selbst haben sich im Laufe der Zeit verĂ€ndert. Zum Beispiel hat die typische TextlĂ€nge seit dem Start der Website kontinuierlich zugenommen, trotz der Krisen. Ăber ein Jahrzehnt hinweg haben die Texte fast um das Zehnfache zugenommen!

Auch der Stil der Texte hat sich (im GroĂen und Ganzen) verĂ€ndert. In den ersten Jahren von Habr beispielsweise stieg der Anteil von Code und Zahlen in den Texten an:

Nachdem ich die allgemeine Dynamik der Website analysiert hatte, beschloss ich, die VerĂ€nderungen in der Beliebtheit verschiedener Themen zu messen. Themen können automatisch aus Texten extrahiert werden, aber zunĂ€chst kann man sich auf die vorhandenen Tags verlassen, die von den Autoren jedes Artikels zugewiesen wurden. Vier typische Trends habe ich im Diagramm ausgegeben. Das Thema "Google" dominierte anfĂ€nglich (möglicherweise hauptsĂ€chlich aufgrund der SEO-Optimierung), verlor jedoch mit jedem Jahr an Bedeutung. Javascript war ein beliebtes Thema und bleibt es allmĂ€hlich, wĂ€hrend maschinelles Lernen erst in den letzten Jahren rasant an PopularitĂ€t zulegte. Linux bleibt hingegen ĂŒber das ganze Jahrzehnt hinweg relevant.

NatĂŒrlich wurde ich neugierig, welche Themen die höchste LeseraktivitĂ€t anziehen. Ich habe die mediane Anzahl von Aufrufen, Stimmen und Kommentaren fĂŒr jedes Thema gezĂ€hlt. Das ist das Ergebnis:
- Die am hÀufigsten angesehenen Themen: arduino, Webdesign, Webentwicklung, Digest, Links, css, html, html5, nginx, Algorithmen.
- Die "likable" Themen: vk.com, Humor, jquery, opera, c, html, Webentwicklung, html5, css, Webdesign.
- Die am meisten diskutierten Themen: opera, skype, Freelancing, vk.com, ubuntu, Arbeit, nokia, nginx, arduino, firefox.
Ăbrigens, da ich die Themen vergleiche, können sie auch nach HĂ€ufigkeit bewertet werden (und die Ergebnisse mit ).
- In all den Jahren seit der GrĂŒndung von Habr waren die beliebtesten Tags (in absteigender Reihenfolge) google, android, javascript, microsoft, linux, php, apple, java, python, Programmierung, Startups, Entwicklung, ios, Startup, soziale Netzwerke.
- Im Jahr 2017 waren die beliebtesten Themen javascript, python, java, android, Entwicklung, linux, c++, Programmierung, php, c#, ios, maschinelles Lernen, Informationssicherheit, microsoft, react.
Beim Vergleich dieser Rankings kann man beispielsweise auf den Siegeszug von Python und das Verschwinden von php, oder auf den "Sonnenuntergang" des Startup-Themenbereichs und den Aufstieg des maschinellen Lernens hinweisen.
Nicht alle Tags auf Habr haben eine so offensichtliche thematische FĂ€rbung. Hier sind zum Beispiel ein Dutzend Tags, die nur einmal vorkamen, aber mir einfach amĂŒsant erschienen. Also: "Idee treibt den Fortschritt voran", "Laden von Diskettenabbild", "Bundesstaat Iowa", "Dramaturgie", "Superalesha", "Dampfmaschine", "Was man am Samstag tun kann", "Ich habe einen Fuchs im Fleischwolf", "Aber es kam wie immer", "Es ist nicht gelungen, witzige Tags zu erfinden". Um das Thema solcher Artikel zu bestimmen, sind Tags nicht ausreichend â es wird erforderlich sein, thematische Modellierung an den Texten der Artikel durchzufĂŒhren.
Eine detailliertere Analyse des Inhalts der Artikel wird im nĂ€chsten Beitrag stattfinden. Erstens beabsichtige ich, ein Modell zu erstellen, das die Anzahl der Aufrufe eines Artikels je nach Inhalt vorhersagt. Zweitens möchte ich ein neuronales Netzwerk trainieren, um Texte im Ă€hnlichen Stil wie die Autoren von Habr zu generieren. Abonnieren Sie also đ
P.S. Und hier ist die zensierte .
Quelle: habr.com
