Question

Par exemple en utilisant cette décharge Wikipedia:

http: // en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=lebron%20james&rvprop=content&redirects=true&format=xmlfm

Y at-il une bibliothèque existante pour Python que je peux utiliser pour créer un tableau avec la cartographie des sujets et des valeurs?

Par exemple:

{height_ft,6},{nationality, American}
Était-ce utile?

La solution

On dirait que vous voulez vraiment être en mesure d'analyser MediaWiki le balisage. Il y a une bibliothèque Python conçu à cet effet appelé MWLIB. Vous pouvez utiliser les packages XML intégrés de Python pour extraire le contenu de la page de la réponse de l'API, puis passez ce contenu dans l'analyseur de MWLIB pour produire une représentation d'objets que vous pouvez parcourir et analyser dans le code pour extraire les informations que vous voulez. MWLIB est sous licence BSD.

Autres conseils

Juste trébuché sur une bibliothèque PyPI, wikidump , qui prétend fournir

  

Outils pour manipuler et extraire des données de wikipedia dépotoirs

Je ne l'utilise pas encore, vous êtes sur votre propre pour essayer ...

Je décrit comment faire en utilisant une combinaison de pywikibot et mwparserfromhell this après (n'ont pas assez réputation encore marquer comme un double).

In [1]: import mwparserfromhell

In [2]: import pywikibot

In [3]: enwp = pywikibot.Site('en','wikipedia')

In [4]: page = pywikibot.Page(enwp, 'Waking Life')            

In [5]: wikitext = page.get()               

In [6]: wikicode = mwparserfromhell.parse(wikitext)

In [7]: templates = wikicode.filter_templates()

In [8]: templates?
Type:       list
String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name           = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
Length:     31
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items

In [10]: templates[:2]
Out[10]: 
[u'{{Use mdy dates|date=September 2012}}',
 u"{{Infobox film\n| name           = Waking Life\n| image          = Waking-Life-Poster.jpg\n| image_size     = 220px\n| alt            =\n| caption        = Theatrical release poster\n| director       = [[Richard Linklater]]\n| producer       = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer         = Richard Linklater\n| starring       = [[Wiley Wiggins]]\n| music          = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing        = Sandra Adair\n| studio         = [[Thousand Words]]\n| distributor    = [[Fox Searchlight Pictures]]\n| released       = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime        = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country        = United States\n| language       = English\n| budget         =\n| gross          = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]

In [11]: infobox_film = templates[1]

In [12]: for param in infobox_film.params:
             print param.name, param.value

 name             Waking Life

 image            Waking-Life-Poster.jpg

 image_size       220px

 alt             

 caption          Theatrical release poster

 director         [[Richard Linklater]]

 producer         [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West

 writer           Richard Linklater

 starring         [[Wiley Wiggins]]

 music            Glover Gill

 cinematography   Richard Linklater<br />[[Tommy Pallotta]]

 editing          Sandra Adair

 studio           [[Thousand Words]]

 distributor      [[Fox Searchlight Pictures]]

 released         {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}

 runtime          101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>

 country          United States

 language         English

 budget          

 gross            $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>

Ne pas oublier que params sont des objets mwparserfromhell aussi!

Je sais que la question est vieux, mais je cherchais une bibliothèque qui parse wikipedia décharge xml. Cependant, les bibliothèques proposées, wikidump et ne MWLIB, offrent pas beaucoup de documentation de code. Puis, j'ai trouvé Mediwiki-utilities , qui a une documentation de code: http://pythonhosted.org/mediawiki-utilities/ .

WikiExtractor semble être une manière propre, simple et efficace de le faire en Python aujourd'hui: https: // github .com / Attardi / wikiextractor

Il fournit un moyen facile d'analyser une décharge Wikipedia en une simple structure de fichiers comme ceci:

<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>

... où chacun regarde doc comme:

<doc id="2" url="http://it.wikipedia.org/wiki/Harmonium">
Harmonium.
L'harmonium è uno strumento musicale azionato con una tastiera, detta manuale.
Sono stati costruiti anche alcuni harmonium con due manuali.
...
</doc>

Il y a des informations sur Python et les bibliothèques XML .

Si vous demandez est-il une bibliothèque existante qui a été conçu pour analyser Wiki (pedia) XML spécifique et répondre à vos besoins, cela est douteux. Cependant, vous pouvez utiliser l'une des bibliothèques existantes pour traverser les DOM et retirer les données dont vous avez besoin.

Une autre option est d'écrire une feuille de style XSLT qui fait similaire et appeler à l'aide lxml. Cela vous permet également de faire des appels à des fonctions Python à l'intérieur du XSLT afin que vous obtenez le meilleur des deux mondes.

Vous êtes probablement le Pywikipediabot pour manipuler l'API wikipedia.

Je dirais que regarder à l'aide Belle soupe et juste obtenir la page de Wikipédia en HTML au lieu d'utiliser l'API.

Je vais essayer de poster un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top