Habrastatistika: saytın ən çox və ən az ziyarət edilən hissələrini araşdırmaq
Hey Habr.
В əvvəlki hissə Habrın trafiki əsas parametrlərə - məqalələrin sayına, baxışlarına və reytinqlərinə görə təhlil edilib. Bununla belə, sayt bölmələrinin populyarlığı məsələsi araşdırılmamış qalır. Buna daha ətraflı baxmaq və ən populyar və ən populyar olmayan mərkəzləri tapmaq maraqlı oldu. Nəhayət, geektimes effektinə daha ətraflı baxacağam və yeni reytinqlərə əsaslanan ən yaxşı məqalələrin yeni seçimi ilə bitirəcəyəm.
Baş verənlərlə maraqlananlar üçün davamı kəsilməkdədir.
Bir daha nəzərinizə çatdırım ki, statistika və reytinqlər rəsmi deyil, mənim heç bir insayder məlumatım yoxdur. Həmçinin haradasa səhv etmədiyimə və ya nəyisə qaçırmadığıma zəmanət verilmir. Amma yenə də düşünürəm ki, maraqlı oldu. Əvvəlcə koddan başlayacağıq, bununla maraqlanmayanlar ilk bölmələri atlaya bilərlər.
Məlumatların toplanması
Parserin ilk versiyasında yalnız baxış sayı, şərhlər və məqalə reytinqləri nəzərə alınıb. Bu, artıq yaxşıdır, lakin daha mürəkkəb sorğular etməyə imkan vermir. Saytın tematik bölmələrini təhlil etməyin vaxtı gəldi, bu sizə olduqca maraqlı araşdırmalar aparmağa imkan verəcək, məsələn, “C++” bölməsinin populyarlığının bir neçə il ərzində necə dəyişdiyini görə bilərsiniz.
Məqalənin təhlili təkmilləşdirildi, indi məqalənin aid olduğu mərkəzləri, həmçinin müəllifin ləqəbini və onun reytinqini qaytarır (burada da çox maraqlı şeylər edilə bilər, lakin bu daha sonra gələcək). Məlumat bu kimi görünən csv faylında saxlanılır:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"Мессенджер Slack — причины выбора, косяки при внедрении и особенности сервиса, облегчающие жизнь",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
Saytın əsas tematik mərkəzlərinin siyahısını alacağıq.
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
find_between funksiyası və Str sinfi iki teq arasında sətir seçir, mən onlardan istifadə etdim əvvəllər. Tematik mərkəzlər "*" işarəsi ilə qeyd olunur ki, onlar asanlıqla vurğulana bilsinlər və siz həmçinin digər kateqoriyaların bölmələrini əldə etmək üçün müvafiq sətirləri şərhdən çıxara bilərsiniz.
get_hubs funksiyasının çıxışı lüğət kimi saxladığımız kifayət qədər təsir edici siyahıdır. Mən konkret olaraq siyahını tam şəkildə təqdim edirəm ki, onun həcmini təxmin edə biləsiniz.
Qalan qovşaqlar da eyni şəkildə qorunub saxlanılmışdır. İndi məqalənin geektimes və ya profil mərkəzinə aid olub-olmamasından asılı olmayaraq nəticəni qaytaran funksiya yazmaq asandır.
Matplotlib istifadə edərək dərc edilmiş məqalələrin sayını göstəririk:
Qrafikdə “geektimes” və “yalnız geektimes” məqalələrini böldüm, çünki Məqalə eyni anda hər iki bölməyə aid ola bilər (məsələn, “DIY” + “mikrokontrollerlər” + “C++”). Saytdakı profil məqalələrini vurğulamaq üçün "profil" təyinatından istifadə etdim, baxmayaraq ki, bunun üçün ingilis dilində profil termini tamamilə düzgün deyil.
Əvvəlki hissədə biz bu yaydan geektimes üçün məqalələr üçün ödəniş qaydalarının dəyişməsi ilə bağlı “geektimes effekti” haqqında soruşmuşduq. Geektimes məqalələrini ayrıca göstərək:
Nəticə maraqlıdır. Geektimes məqalələrinin ümumi sayına təxmini nisbəti 1:5 civarındadır. Baxışların ümumi sayı nəzərəçarpacaq dərəcədə dəyişsə də, “əyləncəli” məqalələrə baxış təxminən eyni səviyyədə qaldı.
Həmçinin qeyd edə bilərsiniz ki, "geektimes" bölməsindəki məqalələrin ümumi baxış sayı qaydaları dəyişdirildikdən sonra yenə də azalıb, lakin "gözlə" ümumi dəyərlərin 5% -dən çox deyil.
Hər məqaləyə orta baxış sayına baxmaq maraqlıdır:
“Əyləncəli” məqalələr üçün bu, orta hesabla təxminən 40% yuxarıdır. Bu, yəqin ki, təəccüblü deyil. Aprelin əvvəlindəki uğursuzluq mənim üçün aydın deyil, bəlkə də belə oldu, ya da bir növ təhlil xətası və ya geektimes müəlliflərindən biri tətilə getdi;).
Yeri gəlmişkən, qrafik məqaləyə baxış sayında daha iki nəzərə çarpan zirvəni - Yeni il və May bayramlarını göstərir.
Qovşaqlar
Gəlin hubların vəd edilmiş təhlilinə keçək. Baxışların sayına görə ilk 20 mərkəzi sadalayaq:
Təəccüblüdür ki, baxış baxımından ən populyar mərkəz “İnformasiya təhlükəsizliyi” olub, ilk 5 liderə “Proqramlaşdırma” və “Populyar elm” də daxil olub.
Antitop Gtk və Kakaonu tutur.
Sizə bir sirr deyim, üst hublar da görünə bilər burada, baxmayaraq ki, baxış sayı orada göstərilmir.
Qiymət
Və nəhayət, vəd edilmiş reytinq. Hub təhlili məlumatlarından istifadə edərək, bu il 2019-cu il üçün ən populyar mərkəzlər üçün ən populyar məqalələri göstərə bilərik.
Və nəhayət, heç kimin inciməməsi üçün ən az ziyarət edilən "gtk" mərkəzinin reytinqini verəcəyəm. Bir il ərzində nəşr olundu одна Reytinqin birinci cərgəsini həm də “avtomatik” olan məqalə tutur.