我如何解析 Habr,第 1 部分:趨勢

當新年的奧利維爾做完了,我無事可做,我決定把 Habrahabr(及相關平台)的所有文章都下載到我的電腦上探索。

有幾個有趣的故事。 其中第一個是網站成立 12 年來文章格式和主題的發展。 例如,某些主題的動態具有很強的指示性。 續——下切。

我如何解析 Habr,第 1 部分:趨勢

解析過程

要了解 Habr 是如何發展的,有必要閱讀他的所有文章並從中提取元信息(例如,日期)。 繞過很容易,因為所有文章的鏈接看起來都像“habrahabr.ru/post/337722/”,並且數字嚴格按順序給出。 知道最後一個帖子的數量略低於 350 萬,我只是循環遍歷了所有可能的文檔 ID(Python 代碼):

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

功能 download_document 嘗試加載具有相應 id 的頁面,並嘗試從 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)

在解析的過程中,我發現了幾個新東西。

首先,他們說創建比處理器內核更多的進程是沒有用的。 但就我而言,事實證明限制資源不是處理器,而是網絡,100 個進程比 4 個或 20 個進程運行得更快。

其次,在一些帖子中有特殊字符的組合——例如,像“%&#@”這樣的委婉語。 事實證明 html.parser,我首先使用的,對組合有反應 &# 痛苦地考慮它是 html 實體的開始。 我已經打算做黑魔法了,但論壇建議您可以只更改解析器。

第三,我設法卸載了所有出版物,除了三個。 編號為 65927、162075 和 275987 的文檔立即被我的防病毒軟件刪除。 這些文章分別涉及下載惡意 pdf 的 javascript 鏈、一組瀏覽器插件形式的 SMS 勒索軟件,以及讓 iPhone 重啟的 CrashSafari.com 網站。 Antivirus 後來在系統掃描期間發現了另一篇文章:發布 338586 是關於寵物商店網站上使用用戶的處理器來挖掘加密貨幣的腳本。 所以我們可以認為防病毒的工作是相當充分的。

“實時”文章結果僅為潛在最大值的一半 - 166307 篇。 關於其餘部分,Habr 給出了選項“該頁面已過時、已被刪除或根本不存在”。 好吧,任何事情都有可能發生。

文章上傳之後是技術工作:例如,發布日期必須從格式“'21 December 2006 at 10:47 am”轉換為標準格式 datetime, 和“12,8k” 觀看次數 - 在 12800 次。在這個階段,又發生了一些事件。 最有趣的是與投票計數和數據類型有關:一些舊帖子有一個整數溢出,每個帖子都收到了 65535 票。

我如何解析 Habr,第 1 部分:趨勢

結果,文章的文本(沒有圖片)佔用了我 1.5 GB 的空間,帶有元信息的評論 - 另外 3 GB,大約一百兆字節 - 關於文章的元信息。 這可以完全保存在RAM中,這對我來說是一個驚喜。

我不是從文本本身開始分析文章,而是從元信息開始分析:日期、標籤、中心、觀點和喜歡。 原來她能說的很多。

Habrahabr發展趨勢

該網站上的文章自 2006 年以來已發表; 最密集 - 在 2008-2016 年。

我如何解析 Habr,第 1 部分:趨勢

這些文章在不同時間的閱讀積極程度並不容易評估。 2012 年及更早的文本收到更多評論和評分,但較新的文本有更多的瀏覽量和書籤。 這些指標在 2015 年僅出現過一次(減半)。 也許,在經濟和政治危機的情況下,讀者的注意力已經從 IT 博客轉移到更痛苦的問題上。

我如何解析 Habr,第 1 部分:趨勢

除了文章本身,我還下載了更多評論。 有 6 萬條評論,然而,其中 240 萬條被禁止(“一個不明飛行物飛來並在這裡發表了這個題詞”)。 註釋的一個有用屬性是它們具有時間戳。 通過研究評論的時間,你可以大致了解文章閱讀的時間。

原來,大部分文章都是在上午 10 點到晚上 20 點之間的某處同時撰寫和評論的,即在一個典型的莫斯科工作日。 這可能意味著 Habr 是出於專業目的而閱讀的,這是在工作中拖延的好方法。 順便說一下,這種時間分佈從 Habr 的建立到現在都是穩定的。

我如何解析 Habr,第 1 部分:趨勢

然而,評論時間戳的主要好處不是一天中的時間,而是文章“活躍生命”的持續時間。 我計算了從文章發表到發表評論的時間分佈。 事實證明,現在中位數評論(綠線)大約在 20 小時內出現,即在發布後的第一天,平均而言,該文章的所有評論中有一半多一點被留下。 在兩天內,他們留下了所有評論的 75%。 同時,較早的文章閱讀速度更快——例如,2010 年,一半的評論出現在前 6 小時內。

我如何解析 Habr,第 1 部分:趨勢

令我驚訝的是,評論變長了:在 Habr 的一生中,評論中的平均字符數幾乎翻了一番!

我如何解析 Habr,第 1 部分:趨勢

比評論更容易的反饋是投票。 與許多其他資源不同,在 Habré 上,您不僅可以添加優點,還可以添加缺點。 然而,讀者並不經常利用最後的機會:目前不喜歡的比例約為所有投票的 15%。 曾經有更多,但隨著時間的推移,讀者變得更加友善。

我如何解析 Habr,第 1 部分:趨勢

隨著時間的推移,文本本身也發生了變化。 例如,儘管存在危機,文本的典型長度並沒有從網站推出之初就穩定增長。 十年來,文本的長度幾乎增加了十倍!

我如何解析 Habr,第 1 部分:趨勢

文本的風格(大致上)也發生了變化。 例如,在 Habr 存在的頭幾年,代碼和數字在文本中的份額增加了:

我如何解析 Habr,第 1 部分:趨勢

在了解了網站的整體動態後,我決定衡量各種主題的流行度如何變化。 主題可以從文本中自動選擇,但對於初學者來說,你不能重新發明輪子,而是使用每篇文章的作者貼上的現成標籤。 我在圖表上畫出了四個典型的趨勢。 “谷歌”主題最初占主導地位(可能主要是由於 SEO),但多年來一直在減肥。 Javascript 一直是一個熱門話題,並且繼續緩慢增長,但機器學習只是在最近幾年才開始迅速流行起來。 另一方面,Linux 在過去十年中同樣重要。

我如何解析 Habr,第 1 部分:趨勢

當然,我開始對哪些話題能吸引更多讀者的興趣感興趣。 我計算了每個主題的瀏覽量、投票數和評論數的中位數。 這是發生了什麼:

  • 查看最多的主題:arduino、網頁設計、網頁開發、摘要、鏈接、css、html、html5、nginx、算法。
  • 最“喜歡”的主題:vkontakte、幽默、jquery、opera、c、html、web 開發、html5、css、web 設計。
  • 討論最多的話題:opera、skype、freelance、vkontakte、ubuntu、work、nokia、nginx、arduino、firefox。

順便說一句,因為我在比較主題,你可以按頻率對它們進行排名(並將結果與 2013年的類似文章).

  • 在 Habr 存在的所有年裡,最受歡迎的標籤(按降序排列)是 google、android、javascript、microsoft、linux、php、apple、java、python、programming、startups、development、ios、startup、social networks
  • 2017年最流行的是javascript、python、java、android、開發、linux、c++、編程、php、c#、ios、機器學習、信息安全、microsoft、react

在比較這些評級時,可以關注例如Python的勝利進軍和php的滅絕,或者關注創業主題的“日落”和機器學習的興起。

並非 Habré 上的所有標籤都具有如此明顯的主題色彩。 例如,這裡有十幾個標籤只見過一次,但對我來說似乎很有趣。 所以:“想法是進步的動力”、“從軟盤映像啟動”、“愛荷華州”、“戲劇”、“superalesh”、“蒸汽機”、“星期六要做的事”、“我有絞肉機裡的狐狸”,“結果一如既往”,“我們想不出有趣的標籤”。 要確定此類文章的主題,標籤是不夠的 - 您必須對文章的文本進行主題建模。

更詳細的文章內容分析將在下一篇文章中進行。 首先,我將構建一個模型,根據文章的內容預測文章的頁面瀏覽量。 其次,我想教神經網絡生成與 Habr 作者風格相同的文本。 所以訂閱🙂

PS 這是嗶嗶聲 數據集.

來源: www.habr.com

添加評論