2010-08-26 8 views
2

Je voudrais convertir un contenu wikipedia extrait avec API en texte brut.Page Wikimedia en texte en Python

Un conseil?

+0

je l'ai écrit au sujet de ce problème sur mon blog une fois: [l'abomination des modèles mediawiki] (http://hewgill.com/journal/ entrées/343-l'abomination-de-mediawiki-modèles). Résumé: Je n'ai trouvé aucune grammaire et aucun code pour analyser les templates Mediawiki * sauf * pour une installation complète de Mediawiki. –

Répondre

1

Il est censé y avoir quelques python mediawiki markup parsers/renderers, et vous pouvez pratiquement convertir du HTML en texte clair du style dont vous avez besoin. Je ne sais pas si cela fonctionnerait bien, cependant.

0

Je l'ai fait il y a quelques jours pour cloner un site Wikimedia

import re 
from mediawikitools import * 
import os 
from sys import argv 

def list_all_pages(site): 
    query_results = api.APIRequest(site, {'action':'query', 'list':'allpages', 'aplimit':'500'}).query() 
    results = query_results['query']['allpages'] 
    return results 

def clone(site): 
    if not os.path.exists(site.siteinfo['sitename'][:20]): 
     print 'Make Dir', site.siteinfo['sitename'][:20] 
     os.makedirs(site.siteinfo['sitename'][:20]) 
    index = open(site.siteinfo['sitename'][:20] + '/' + 'Index','w') 

    pages = list_all_pages(site) 
    for test_page in pages: 
     if test_page['title'].rfind('/') != -1 and not os.path.exists(site.siteinfo['sitename'][:20] + '/' + test_page['title'][:test_page['title'].rfind('/')+1]): 
      #print test_page['title'][:test_page['title'].rfind('/')+1] 
      os.makedirs(site.siteinfo['sitename'][:20] + '/' + test_page['title'][:test_page['title'].rfind('/')+1]) 
     page_file = open(site.siteinfo['sitename'][:20] + '/' + test_page['title']+'.wiki', 'w') 
     try: 
      index.write(site.siteinfo['sitename'][:20] + '/' + test_page['title']+'.wiki') 
      wiki_file = page.Page(site, test_page['title']) 
      print site.siteinfo['sitename'][:20] + '/' + test_page['title']+'.wiki' 
      page_file.write(wiki_file.getWikiText()) 
     except KeyError, e: 
      print e 
     except UnicodeEncodeError, e: 
      print e 

if __name__ == '__main__': 
    site = wiki.Wiki("http://localhost/wiki/api.php") 
    site.setUserAgent('Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1') 
    print site.siteinfo['sitename'] 
    clone(site) 


    #site.login(username, password, force=true) if you need a username and password to acess it