Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/xml»

De WikiEducator
Saltar a: navegación, buscar
Línea 33: Línea 33:
  
 
{{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'''}}
 
== Scraping con Amara ==
 
 
=== Lectura de una página html ===
 
El proceso básico consiste en utilizar un '''parser''' para analizar el documento. Amara tiene 3 parsers:
 
amara.parse
 
amara.bindery.parse
 
amara.bindery.html.parse
 
 
Para usar documentos html usaremos el tercero, que además soporta documentos no válidos (tagsoup). El objeto que devuelve el parser es el que usamos para leer y modificar un documento web.
 
 
{{Actividad|
 
Escribe este ejemplo para leer un documento. Modifica '''URL''' para que tenga una dirección real. ¿Qué vemos en la pantalla?
 
<source lang="python" line="GESHI_NORMAL_LINE_NUMBERS" >
 
from amara.bindery import html
 
URL = 'http://pagina.destino.com'
 
 
doc = html.parse(URL)
 
print doc
 
</source>
 
{{Tip|'''doc''' tiene toda la información del documento}}
 
}}
 
 
=== Búsqueda con xpath ===
 
<source lang="python" line="GESHI_NORMAL_LINE_NUMBERS" >
 
doc = html.parse(URL)
 
encontrados = doc.xml_select(<expresión xpath>)
 
for elemento in encontrados:
 
    <tratar_elemento>
 
</source>
 
 
====Búsqueda de las imágenes de un artículo====
 
<source lang="python">
 
>>> from amara.bindery import html
 
>>> URL = 'http://heraldo.es'
 
>>> doc = html.parse(URL)
 
>>> imagenes = doc.xml_select(u'//img') # las imágenes van en etiquetas img
 
>>> len(imagenes)
 
65
 
>>> primera_imagen = imagenes[0]
 
>>> print primera_imagen.xml_encode()
 
<img src="/MODULOS/global/publico/interfaces/img/logo-Heraldo.png" alt="Últimas noticias de Aragón, Zaragoza, Huesca y Teruel del periódico digital Heraldo.es"/>
 
>>> for im in imagenes:
 
        print im.src
 
/MODULOS/global/publico/interfaces/img/logo-Heraldo.png
 
/uploads/imagenes/iconos/titulos/jmj.jpg
 
/uploads/imagenes/rec70/_cuatrovientos6_011b2ad5.jpg
 
...
 
</source>
 
 
====Búsqueda de las entradas de una revista====
 
Barrapunto publica sus entradas como
 
<source lang="html4strict">
 
<div class="article">
 
<div class="generaltitle">
 
<div class="title">
 
<h3>
 
<a href="//softlibre.barrapunto.com/">Software Libre</a>: Todo listo para la celebración de los 20 años de Linux
 
 
</h3>
 
</div>
 
</div>
 
<div class="details">
 
...
 
</div>
 
...
 
</div>
 
</source>
 
Para extraer los nombres de los artículos de la primera página:
 
 
<source lang="python">
 
>>> from amara.bindery import html
 
>>> from amara.lib import U  # Extrae los nodos de texto de un fragmento
 
>>> articulos = doc.xml_select(u'//div[@class="article"]')
 
>>> len(articulos)
 
15
 
>>> for ar in articulos:
 
print U(ar.div).strip()  # Navega por el nodo artículo.
 
                                # Cuidado con los espacios en blanco y saltos
 
 
Software Libre: Todo listo para la celebración de los 20 años de Linux
 
Publicado SmartOS, sistema operativo basado en Illumos
 
Un dispositivo permite a los invidentes ver a través de su lengua
 
El fin de la ley de Moore
 
...
 
</source>
 
 
'''Más ejemplos''' en http://wiki.xml3k.org/Amara/Recipes
 
====Expresiones XPATH útiles====
 
<source lang="python">
 
# Nodo que contenga una cadena de texto:
 
expresion = u'.//text()[contains(., "python")]'
 
expresion = u'.//text()[contains(., "%s")]' % cadena.decode('utf-8')
 
# Nodos o atributos que contengan una cadena:
 
expresion = expr = u'.//@*[contains(., "%s")]'
 
</source>
 
 
=== Más ===
 
{{Tip| '''Más info''': http://es.wikieducator.org/LSWC_scraping_the_web/taller_scraping_lwsc_2011}}
 

Revisión de 02:15 11 dic 2012


Amara

  • 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
Icon present.gif
Tip: Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar python-dev