[PYTHON] J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation

L'Organisation Qiita de SDT devient de plus en plus chaude! J'ai donc essayé de faire un classement en quelque sorte ~ (Qu'est-ce que cela signifie !!)

Code source

nnsnodnb/sdt-qiita-ranking | GitHub

Exemple de page publique

スクリーンショット 2016-07-23 午前1.22.55.png

C'est presque comme ça. Approximativement ... Je ne peux encore voir que ceux en SDT, mais à l'avenir, je pense ou non à créer une API pour pouvoir obtenir des classements dans n'importe quelle organisation quand j'ai du temps libre !!

Grattage

paquet

requirements.txt


beautifulsoup4==4.5.0
bottle==0.12.9
Jinja2==2.8
MarkupSafe==0.23

Ne demandez pas si vous avez utilisé Jinja2 ou quelque chose:; (∩´﹏`∩);:

Importez le package ♪

from urllib.request import urlopen
from bs4 import BeautifulSoup

Assemblez les pièces à assembler

get_soup()


url = 'http://qiita.com/organizations/smartdt/members'
html = urlopen(url)
return = BeautifulSoup(html, 'html.parser')

Liste des membres et nombre de contributions

get_contribution()


soup = get_soup()

contribution_array = {}
# organizationMemberList_Obtenez toutes les balises li de la classe d'objets
members = soup.findAll('li', class_='organizationMemberList_item')

for member in members:
    #Obtenez le premier un tag pour chaque membre
    a = member.find('a')
    #Liste des membres de l'organisation pour chaque membre_Récupère la première balise div de la classe memberProfile
    profiles = member.find('div', 'organizationMemberList_memberProfile')
    #OrganizationMemberList à partir des balises div obtenues ci-dessus_Obtenez toutes les balises div de la classe memberStats et spécifiez la seconde
    contribute = profiles.findAll('div', 'organizationMemberList_memberStats')[1]

    # a.attrs['href'] -> nnsnodnb
    name = a.attrs['href'].split('/')[1]
    # contribute.text -> 50 Contribution
    number = int(contribute.text.split(' Con')[0])
    
    contribution_array.update({name: number})

Icône de membre

get_membericon()


soup = get_soup()

icons = {}
# organizationMemberList_Récupère toutes les balises img de la classe icon
member_icons = soup.findAll('img', 'organizationMemberList_icon')
# organizationMemberList_Obtenez toutes les balises li de la classe d'objets
members = soup.findAll('li', class_='organizationMemberList_item')

for index in range(len(members)):
    a = members[index].find('a')
    name = a.attrs['href'].split('/')[1]
    #Extraire l'attribut src de chaque membre de la liste d'icônes de membre
    icon = member_icons[index].attrs['src']

    icons.update({name: icon})

Cette fois, name est défini comme clé afin de relier la ** liste des membres et le nombre de contributions ** et l'icône ** membre **.

Trier par classement

J'utilise un dictionnaire car je ne peux pas avoir de relation entre «clé» et «valeur» dans une liste. Cependant, comme le dictionnaire n'est qu'un dictionnaire, il est sorti dans le désordre. Envie de pleurer Cela prend donc la forme d'un retrait dans l'ordre et d'une saisie dans la liste. N'oubliez pas non plus reverse () car les données sont ajoutées par ordre croissant lorsque vous la frappez.

ranking()


contribution = get_contribution()

names, numbers = [], []
for key, value in sorted(contribution.items(), key=lambda x:x[1]):
    names.append(key)
    numbers.append(value)
    
user_icons = get_membericon()

names.reverse()
numbers.reverse()

Verser dans le gabarit

Cette fois, j'ai utilisé Bottle comme cadre Web. Il existe de nombreuses façons de l'utiliser si vous google! Devrait être!

from bottle import template, get, run

En gros, c'est bien

Flux vers le modèle


return template('hoge')
return template('foo', name = name)

Si vous le faites comme ça, ce sera gérable ~ Pour hoge et foo, créez un dossier views dans le répertoire de l'application et créez hoge.tpl et foo.tpl ci-dessous! Identique au HTML

Lors de l'exécution du code Python dans hoge.tpl, il est possible de l'exécuter avec%. De plus, si vous aimez template ('foo', name = name), vous pouvez le remplacer par {{name}} dans hoge.tpl. ~~ moustache C'est comme ça. ~~

Aussi, si vous voulez terminer la boucle etc. en utilisant for ou ʻif`, vous pouvez faire comme suit

comme échantillon


% for i in range(10):
% #Sortie vers borne
% print(i)
% end

si échantillon


% if name == 'nnsnodnb':
% <p>Yaho ~!</p>
% else:
% <p>Qui es-tu wwwww</p>
% end

Après tout ça fait mal sans indentation! !! Bien entendu, il est également possible d'écrire «hoge.tpl» avec indentation.

Si vous codez vaguement comme ceci, une page comme un exemple de page publique sera créée.

Exécution de la bouteille

main()


run(host = '0.0.0.0')
$ python hoge.py

Résumé

Rien que par l'existence d'une telle chose, la puissance de combat de chacun peut être visualisée et la cible a été visualisée vaguement!

Si vous avez des questions, laissez un commentaire ou une demande de modification!

Recommended Posts

J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
[Python] J'ai analysé le journal d'un homme au cours de sa première année de vie professionnelle et j'ai fait un jugement positif / négatif sur la vie professionnelle.
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
〇✕ J'ai fait un jeu
J'ai fait en sorte que l'IA patrouille sur le net et créé un service Web de classement des gadgets mis à jour une fois par semaine
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai fait une commande pour marquer le clip de la table
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
J'ai fait un texte Python
J'ai fait un robot discord
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
J'ai créé une caméra réseau simple en combinant ESP32-CAM et RTSP.
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai fait apprendre à RNN l'onde de péché et j'ai essayé de prédire: l'ajustement des paramètres hyper
J'ai un peu assoupli les conditions et laissé optuna résoudre le nombre
J'ai fait un bot mou qui m'informe de la température
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai créé un bot de lecture de chat Discord en imitant l'apparence
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
J'ai créé un démon avec Python
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
[Python] J'ai créé un code de scraping web qui acquiert automatiquement le titre de l'actualité et l'URL de Nihon Keizai Shimbun.
J'ai créé un nouveau compartiment AWS S3
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un programme de gestion de la paie en Python!
J'ai touché "Orator" alors j'ai fait une note
J'ai fait un compteur de caractères avec Python
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire