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 !!)
nnsnodnb/sdt-qiita-ranking | GitHub
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 !!
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:; (∩´﹏`∩);:
from urllib.request import urlopen
from bs4 import BeautifulSoup
get_soup()
url = 'http://qiita.com/organizations/smartdt/members'
html = urlopen(url)
return = BeautifulSoup(html, 'html.parser')
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})
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 **.
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()
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.
main()
run(host = '0.0.0.0')
$ python hoge.py
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