|
|
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}}
| |