Habrastatistics: ngajalajah bagian anu paling sering dilongok situs
Hejo Habr.
В bagian saméméhna Lalu lintas Habr dianalisis dumasar kana parameter utama - jumlah tulisan, pandangan sareng ratingna. Sanajan kitu, isu popularitas bagian situs tetep unexamined. Éta janten istiméwa pikeun ningali ieu sacara langkung rinci sareng milari hub anu pang populerna sareng paling henteu populer. Tungtungna, kuring bakal ningali pangaruh geektimes sacara langkung rinci, ditungtungan ku pilihan énggal tina tulisan anu pangsaéna dumasar kana réngking énggal.
Pikeun maranéhanana anu kabetot dina naon anu lumangsung, lajengkeun aya dina cut nu.
Hayu atuh ngingetan sakali deui yén statistik na ratings teu resmi, abdi teu boga informasi insider nanaon. Ogé teu dijamin yén kuring teu nyieun kasalahan wae atawa lasut hal. Tapi tetep, Jigana tétéla metot. Urang mimitian ku kode heula; jalma anu henteu resep ieu tiasa ngalangkungan bagian anu munggaran.
Ngumpulkeun data
Dina versi mimiti parser, ukur jumlah pintonan, koméntar sarta ratings artikel dicokot kana rekening. Ieu geus alus, tapi teu ngidinan Anjeun pikeun nyieun queries leuwih kompleks. Waktosna pikeun nganalisis bagian tematik situs éta; ieu bakal ngamungkinkeun anjeun pikeun ngalakukeun panalungtikan anu cukup pikaresepeun, contona, tingali kumaha popularitas bagian "C ++" parantos robih sababaraha taun.
Parser artikel geus ningkat, ayeuna eta mulih hubs nu artikel milik, kitu ogé nickname panulis sarta rating na (loba hal metot bisa dipigawé di dieu, teuing, tapi nu bakal datang engké). Data disimpen dina file csv anu katingali sapertos kieu:
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
...
Kami bakal nampi daptar hub tematik utama situs éta.
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)
Fungsi find_between jeung kelas Str pilih string antara dua tag, I dipaké aranjeunna tadi. Hub tematik ditandaan ku "*" supados tiasa disorot kalayan gampang, sareng anjeun ogé tiasa ngahapus koméntar garis anu cocog pikeun nyandak bagian tina kategori anu sanés.
Kaluaran tina fungsi get_hubs mangrupakeun daptar cukup impressive, nu urang simpen salaku kamus. Kuring sacara khusus nampilkeun daptar sacara lengkep supados anjeun tiasa ngira-ngira volumena.
Kami nunjukkeun jumlah tulisan anu diterbitkeun nganggo Matplotlib:
Kuring dibagi artikel "geektimes" jeung "geektimes wungkul" dina bagan, sabab Artikel bisa jadi milik duanana bagian dina waktos anu sareng (contona, "DIY" + "mikrokontroler" + "C++"). I dipaké designation "profil" pikeun nyorot artikel profil dina loka, sanajan meureun propil istilah Inggris pikeun ieu teu sagemblengna bener.
Dina bagian saméméhna kami nanya ngeunaan "efek geektimes" pakait sareng parobahan dina aturan pamayaran pikeun artikel pikeun geektimes dimimitian usum panas ieu. Hayu urang mintonkeun artikel geektimes misah:
hasilna metot. Rasio perkiraan tina pintonan artikel geektimes ka total aya di sabudeureun 1: 5. Tapi bari jumlah total pintonan fluctuated noticeably, nempoan artikel "hiburan" tetep dina kurang leuwih tingkat sarua.
Anjeun oge bisa perhatikeun yén jumlah total pintonan artikel dina bagian "geektimes" masih turun sanggeus ngarobah aturan, tapi "ku panon", teu leuwih ti 5% tina total nilai.
Éta metot pikeun nempo rata-rata jumlah pintonan per artikel:
Pikeun artikel "hiburan" éta ngeunaan 40% luhur rata. Ieu meureun teu heran. Kagagalan dina awal April mah can écés keur kuring, meureun éta naon anu lumangsung, atawa éta sababaraha jenis kasalahan parsing, atawa meureun salah sahiji geektimes pangarang indit dina pakansi ;).
Ku jalan kitu, grafik nembongkeun dua puncak leuwih noticeable dina Jumlah pintonan artikel - libur Taun Anyar jeung Méi.
Hubs
Hayu urang ngaléngkah ka analisis jangji hubs. Hayu urang daptar luhureun 20 hub dumasar jumlah pintonan:
Ahéng, hub anu pang populerna dina hal pandangan nyaéta "Kaamanan Informasi"; 5 pamimpin anu paling luhur ogé kalebet "Programming" sareng "Élmu Populer".
Antitop nempatan Gtk sareng Cocoa.
Kuring gé ngabejaan Anjeun rusiah, hubs luhur ogé bisa ditempo di dieu, sanajan jumlah pintonan teu ditémbongkeun aya.
rating
Sarta pamustunganana, rating jangji. Nganggo data analisis hub, urang tiasa nampilkeun tulisan anu paling populér pikeun hub anu pang populerna pikeun taun 2019 ieu.
Sarta pamustunganana, ambéh teu aya anu gelo, Kuring bakal méré rating tina hub sahenteuna dilongok "gtk". Dina sataun ieu diterbitkeun hiji Artikel, nu ogé "otomatis" nempatan baris kahiji tina rating.