1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #!/usr/bin/python
# -*- coding:Latin-1 -*-
# Ce module recherche un mot anglais sur wikipédia, puis sa traduction en français et enfin la définition correspondante toujours en français.
import urllib, urllib2
from sgmllib import SGMLParser
import re
urlopen = urllib2.urlopen
Request = urllib2.Request
mon_url = 'http://en.wikipedia.org/wiki/w/index.php'
class Wikipedia(object):
def __init__(self):
self.traduction=''
self.definition=''
def rechercher(self,a_rechercher='computer'):
""" - traduction représente la traduction du mot anglais(a_rechercher) et mémorise celle-ci
dans self.traduction.
- appelle la méthode french_traduction()."""
values = {'search':a_rechercher}
txdata = urllib.urlencode(values)
txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
try:
req = Request(mon_url, txdata, txheaders) ### création d'un objet request
handle = urlopen(req) ### on l'ouvre pour renvoyer un handle sur l'url
except IOError, e:
print '--- ERREUR'
else:
self.traduction=self.french_traduction(handle)
def french_traduction(self,handle):
""" - Appelée par rechercher().
- Cette méthode cherche le mot français sur la page en anglais. Ce mot se trouve toujours
sur la ligne qui contient le lien vers la page en français,
exemple :<li class="interwiki-fr"><a href="http://fr.wikipedia.org/wiki/Maison">Français</a></li>
- Le mot français est ensuite retourné à la méthode appelante.
- S'il n'existe pas de traduction dans wikipédia alors None est retounée d'office.
"""
for ligne in handle.readlines():
### Cherche la ligne, puis en extrait le mot français.
if '<li class="interwiki-fr">' in ligne:
traduction=ligne
traduction= ligne[67:]
traduction=traduction[:-21]
return traduction
def definition_du_mot(self,a_rechercher):
""" Cette méthode extrait de la page web affichée la défintion du mot concerné
et la mémorise dans self.definition. """
# url française :
mon_url = 'http://fr.wikipedia.org/wiki/w/index.php'
values = {'search':a_rechercher}
txdata = urllib.urlencode(values)
txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
req = Request(mon_url, txdata, txheaders) ### création d'un objet request
handle = urlopen(req) ### on l'ouvre pour renvoyer un handle sur l'url
parser = URLLister()
parser.feed(handle.read())
parser.close()
self.definition=parser.contenu_texte
class URLLister(SGMLParser):
""" --- URLLISTER pour wikipédia ---"""
def reset(self):
SGMLParser.reset(self)
self.in_p=0 # Si nous sommes à l'intérieur du balise <p>...</p>
self.contenu_texte=''
self.re_multiplespaces = re.compile('\s+') # regular expression used to remove spaces in excess
def start_p(self, attrs):
if self.in_p==0:
print'attrs :', attrs
self.in_p=1
def end_p(self):
self.in_p=2
def handle_data(self, data):
if self.in_p==1:
data=data.replace(chr(160),'W')
self.contenu_texte += self.re_multiplespaces.sub(' ',data.replace('\t',' ').replace('\n','').replace('\r','').replace('"','""'))
if __name__=='__main__':
test=Wikipedia()
test.rechercher()
test.definition_du_mot(test.traduction)
print'--- traduction :', test.traduction
print'--- definition :', test.definition |
Partager