Bonjour: détendu: Il y a des moments où vous souhaitez obtenir des informations sur wikipedia. Utilisons l'API MediaWiki qui peut être utilisée dans de tels cas.
Vous pouvez utiliser des fonctions wiki telles que l'ajout, la mise à jour et la recherche de pages de connexion au wiki.
API: https://ja.wikipedia.org/w/api.php
En donnant à l'URL ci-dessus un type de traitement comme paramètre "action", vous pouvez utiliser diverses fonctions telles que la recherche et la mise à jour. Cette fois, nous allons apprendre comment rechercher et obtenir les informations de base du Wiki "acquisition (action = requête)".
getWikiData
import requests
import json
def getWikiData(url, params):
res = requests.get( url,
params = params)
return res.json()
url ="https://ja.wikipedia.org/w/api.php"
params = { "action" : "query",
"titles" : "Python",
"format" : "json"
}
print(getWikiData(url,params))
【résultat】
{
'batchcomplete': '',
'query': {
'pages': {
'993': {
'pageid': 993, ##Identifiant unique
'ns': 0,## nameSpace
'title': 'Python' ##titre de la page
}
}
}
}
params = { "action" : "query",
"titles" : "Python",
"prop" : "info",
"format" : "json"
}
{
'batchcomplete': '',
'query': {
'pages': {
'993': {
'pageid': 993,
'ns': 0,
'title': 'Python',
'contentmodel': 'wikitext',
'pagelanguage': 'ja',
'pagelanguagehtmlcode': 'ja',
'pagelanguagedir': 'ltr',
'touched': '2020-09-21T07:44:48Z',
'lastrevid': 79623671,
'length': 50355
}
}
}
}
(La plupart du temps [accessoire principal raccourci + accessoire] est le nom de l'élément)
params = { "action" : "query",
"titles" : "Python",
"prop" : "info",##Position debout de l'élément majeur
"inprop" : "watchers",##Position debout du sous-article
"format" : "json"
}
{
'batchcomplete': '',
'query': {
'pages': {
'993': {
'pageid': 993,
'ns': 0,
'title': 'Python',
'contentmodel': 'wikitext',
'pagelanguage': 'ja',
'pagelanguagehtmlcode': 'ja',
'pagelanguagedir': 'ltr',
'touched': '2020-09-21T07:44:48Z',
'lastrevid': 79623671,
'length': 50355,
'watchers': 157 ##ici
}
}
}
}
params = { "action" : "query",
"titles" : "Python",
"prop" : "categories",
"clprop" : "sortkey",
"format" : "json"
}
{
'batchcomplete': '',
'query': {
'pages': {
'993': {
'pageid': 993,
'ns': 0,
'title': 'Python',
'categories': [
{
'ns': 14,
'title': 'Category:Python',
'sortkey': '2a0a505954484f4e',
'sortkeyprefix': '*'
},
{
'ns': 14,
'title': 'Category:Langage orienté objet',
'sortkey': '505954484f4e0a505954484f4e',
'sortkeyprefix': 'PYTHON'
},
{
'ns': 14,
'title': 'Category:Logiciels open source',
'sortkey': '505954484f4e0a505954484f4e',
'sortkeyprefix': 'PYTHON'
},
{
'ns': 14,
'title': 'Category:Langage de script',
'sortkey': '505954484f4e0a505954484f4e',
'sortkeyprefix': 'PYTHON'
},
{
'ns': 14,
'title': 'Category:Examen d'ingénieur d'information de base',
'sortkey': 'e381afe38184e3819de382930a505954484f4e',
'sortkeyprefix': 'Oui'
},
{
'ns': 14,
'title': 'Category:Articles contenant des sources non valides/2018',
'sortkey': '420a505954484f4e',
'sortkeyprefix': 'B'
}
]
}
}
}
}
params = { "action" : "query",
"titles" : "Python",
"list" : "allcategories",
"acprop" : "size", ##Différentes propriétés pour chaque liste
"aclimit" : 5, ##Nombre maximum d'acquisitions Changements de nom d'article pour chaque liste
"format" : "json"
}
{
'batchcomplete': '',
'continue': {
'accontinue': '.22_LR_firearms',
'continue': '-||'
},
'query': {
'pages': {
'993': {
'pageid': 993,
'ns': 0,
'title': 'Python'
}
},
'allcategories': [
{
'size': 1,
'pages': 1,
'files': 0,
'subcats': 0,
'*': '" + afterCat + "'
},
{
'size': 1,
'pages': 1,
'files': 0,
'subcats': 0,
'*': '" + afterCat + "$2'
},
{
'size': 2,
'pages': 2,
'files': 0,
'subcats': 0,
'*': '$1'
},
{
'size': 3,
'pages': 3,
'files': 0,
'subcats': 0,
'*': '((documentation))Pages avec une utilisation inhabituelle de'
},
{
'size': 9,
'pages': 9,
'files': 0,
'subcats': 0,
'*': '+Ultra'
}
]
}
}
params = { "action" : "query",
"titles" : "Python",
"list" : "categorymembers",
"cmtitle" : "Category:Langage orienté objet", ##Si vous utilisez des membres de catégorie, vous devez le définir ici.
"cmlimit" : 5, ##Nombre maximum d'acquisitions
"cmprop" : "ids|title|sortkey",##Articles à obtenir.[|]Vous pouvez spécifier plusieurs délimiteurs.
"format" : "json"
}
{
'batchcomplete': '',
'continue': {
'cmcontinue': 'page|4345594c4f4e|2496222',
'continue': '-||'
},
'query': {
'pages': {
'993': {
'pageid': 993,
'ns': 0,
'title': 'Python'
}
},
'categorymembers': [
{
'pageid': 821212,
'ns': 0,
'title': 'Comparaison des langages orientés objet',
'sortkey': '2ae381b2e3818be3818f0ae382aae38396e382b8e382a7e382afe38388e68c87e59091e8a880e8aa9ee381aee6af94e8bc83'
},
{
'pageid': 181337,
'ns': 0,
'title': 'ActiveBasic',
'sortkey': '41435449564542415349430a4143544956454241534943'
},
{
'pageid': 3785500,
'ns': 0,
'title': 'Ballerina',
'sortkey': '42414c4c4552494e41'
},
{
'pageid': 2066745,
'ns': 0,
'title': 'Boo (Langage de programmation)',
'sortkey': '424f4f2028e38397e383ade382b0e383a9e3839fe383b3e382b0e8a880e8aa9e29'
},
{
'pageid': 1503,
'ns': 0,
'title': 'C Sharp',
'sortkey': '43230a43205348415250'
}
]
}
}
Lors de la création d'un dictionnaire utilisateur pour mecab, j'ai créé le code suivant pour obtenir tous les titres de contenu inclus dans la catégorie correspondante.
makeOwaraiList
import requests
import json
import csv
import re
def getWikiData(url, params):
res = requests.get( url,
params = params)
return res.json()
fileName = "wikiList"
url ="https://ja.wikipedia.org/w/api.php"
params = { "action" : "query",
"list" : "categorymembers",
"cmlimit": "50",
"format" : "json"
}
categories = ['Combinaison de rire japonais','Combinaison de rire des femmes japonaises','Combinaison de rire hommes et femmes japonais','Trio de rires japonais','Groupe de rire japonais','Japon>Couple rire combinaison']
with open( fileName + ".csv",'a', encoding="utf-8") as f:
writer = csv.writer(f)
for category in categories :
params['cmtitle'] = 'Category:' + category;
params['cmcontinue'] = '';
wikiData = getWikiData(url,params)
while True:
for page in wikiData['query']['categorymembers']:
if page['ns'] == 0:
title = (re.sub("\(comédie\)|\(comédieコンビ\)|\(comédietrio\)|\(Talent\)|\(comédieグループ\)|\(trio\)|\(unité\)|\(Artiste\)", "" ,page['title'])).strip()
writer.writerow([title])
if ('continue' in wikiData and wikiData['continue']['cmcontinue']):
params['cmcontinue'] = wikiData['continue']['cmcontinue']
wikiData = getWikiData(url,params)
else :
break
Encore une fois, j'ai pleinement fait confiance à la formule et j'ai étudié et utilisé l'API: détendu: Il existe de nombreuses situations où vous pouvez utiliser les informations sur le wiki, donc si vous pouvez maîtriser cette API, ce sera plus amusant à mettre en œuvre.
Recommended Posts