Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/xml»
De WikiEducator
(→Scraping con Amara) |
(→Algunos ejemplos de uso) |
||
(5 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
− | {{MiTitulo|Trabajo con ficheros xml | + | {{MiTitulo|Trabajo con ficheros xml}} |
== Amara == | == Amara == | ||
Línea 27: | Línea 27: | ||
=== Instalar === | === Instalar === | ||
Para instalar la última versión: | Para instalar la última versión: | ||
− | $ | + | $ pip install -i http://pypi.zepheira.com/releases/index Amara |
O descargar, descomprimir y ejecutar dentro del directorio de amara: | O descargar, descomprimir y ejecutar dentro del directorio de amara: | ||
− | $ | + | $ python setup.py install |
{{Tip| Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar '''python-dev'''}} | {{Tip| Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar '''python-dev'''}} | ||
− | == | + | == Algunos ejemplos de uso == |
+ | Del manual de Amara: http://wiki.xml3k.org/Amara/Tutorial#The_XML_bindery | ||
− | + | '''Uso básico''': recorrer nodos. | |
− | + | <source lang="python"> | |
− | + | from amara import bindery | |
− | + | ||
− | + | ||
− | + | MONTY_XML = """<monty> | |
+ | <python spam="eggs">What do you mean "bleh"</python> | ||
+ | <python ministry="abuse">But I was looking for argument</python> | ||
+ | </monty>""" | ||
− | + | doc = bindery.parse(MONTY_XML) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | doc = | + | m = doc.monty |
− | print | + | p1 = doc.monty.python #or m.python; p1 is just the first python element |
− | + | print | |
− | + | print p1.xml_attributes[(None, u'spam')] | |
− | + | print p1.spam | |
− | + | for p in doc.monty.python: #The loop will pick up both python elements | |
− | + | p.xml_write() | |
− | doc | + | |
− | + | ||
− | + | ||
− | + | ||
</source> | </source> | ||
− | === | + | Ejemplo con uso de '''groupby''' |
− | + | <source lang="python"> | |
+ | from amara import bindery | ||
+ | |||
+ | MONTY_XML = """<quotes> | ||
+ | <quote skit="1">This parrot is dead</quote> | ||
+ | <quote skit="2">What do you mean "bleh"</quote> | ||
+ | <quote skit="2">I don't like spam</quote> | ||
+ | <quote skit="3">But I was looking for argument</quote> | ||
+ | </quotes>""" | ||
+ | |||
+ | doc = bindery.parse(MONTY_XML) | ||
+ | q1 = doc.quotes.quote # or doc.quotes.quote[0] | ||
+ | print q1.skit | ||
+ | print q1.xml_attributes[(None, u'skit')] # XPath works too: q1.xml_select(u'@skit') | ||
+ | |||
+ | for q in doc.quotes.quote: # The loop will pick up both q elements | ||
+ | print unicode(q) # Just the child char data | ||
+ | |||
+ | from itertools import groupby | ||
+ | from operator import attrgetter | ||
+ | |||
+ | skit_key = attrgetter('skit') | ||
+ | for skit, quotegroup in groupby(doc.quotes.quote, skit_key): | ||
+ | print skit, [ unicode(q) for q in quotegroup ] | ||
+ | </source> |
Última revisión de 02:23 11 dic 2012
Amara
- http://wiki.xml3k.org/Amara (Tutorial)
- Tiene dos interfaces:
-
Una muy rápida y con una sintaxis más cercana al xml
import amara URL = '....' # URL puede ser una url, una ruta de un fichero o una cadena de texto doc = amara.parse(URL)
-
Otra más amigable y fácil de utilizar, que convierte el xml en objetos python.
from amara import bindery URL = '....' doc = bindery.parse(URL)
# si el html o xml puede no ser válido: from amara.bindery import html URL = '....' doc = html.parse(URL)
Instalar
Para instalar la última versión:
$ pip install -i http://pypi.zepheira.com/releases/index Amara
O descargar, descomprimir y ejecutar dentro del directorio de amara:
$ python setup.py install
Tip: Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar python-dev
Algunos ejemplos de uso
Del manual de Amara: http://wiki.xml3k.org/Amara/Tutorial#The_XML_bindery
Uso básico: recorrer nodos.
from amara import bindery MONTY_XML = """<monty> <python spam="eggs">What do you mean "bleh"</python> <python ministry="abuse">But I was looking for argument</python> </monty>""" doc = bindery.parse(MONTY_XML) m = doc.monty p1 = doc.monty.python #or m.python; p1 is just the first python element print print p1.xml_attributes[(None, u'spam')] print p1.spam for p in doc.monty.python: #The loop will pick up both python elements p.xml_write()
Ejemplo con uso de groupby
from amara import bindery MONTY_XML = """<quotes> <quote skit="1">This parrot is dead</quote> <quote skit="2">What do you mean "bleh"</quote> <quote skit="2">I don't like spam</quote> <quote skit="3">But I was looking for argument</quote> </quotes>""" doc = bindery.parse(MONTY_XML) q1 = doc.quotes.quote # or doc.quotes.quote[0] print q1.skit print q1.xml_attributes[(None, u'skit')] # XPath works too: q1.xml_select(u'@skit') for q in doc.quotes.quote: # The loop will pick up both q elements print unicode(q) # Just the child char data from itertools import groupby from operator import attrgetter skit_key = attrgetter('skit') for skit, quotegroup in groupby(doc.quotes.quote, skit_key): print skit, [ unicode(q) for q in quotegroup ]