LSWC scraping the web/taller scraping lwsc 2011

Planteamiento del taller de scraping
En el taller vamos a usar Python y Amara para hacer una práctica de web scraping. El nivel del taller es de iniciación.

Configuración
Python y Amara son multiplataforma. En el taller vamos a indicar cómo instalar el entorno en linux.

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.

Ejemplo 1: equipos de la liga
Vamos a practicar con un ejemplo muy sencillo, el ejemplo de la liga. Puedes ver una traza más completa

Ejemplo 2: el horario de la LSWC
Las charlas están marcadas de la siguiente forma:

¡¡No siempre están equiquetadas igual!! Aquí tienes el ejemplo de la traza: horario LSWC

Ejemplo 3: análisis de los cursos de formación para el empleo
Vamos a usar ahora un ejemplo real: el listado de cursos de formación para el empleo del INAEM recogido en http://plan.aragon.es/MapaRec.nsf/fmrListado?OpenForm

Listado de cursos
Observando el código fuente, vemos que los nombres de los cursos van en una celda con class="textoApl1": La expresión xpath correspondiente es: u'//table/tbody//tr'

¿Quieres más datos? ¿Cursos que se celebran en Huesca?

Búsquedas genéricas
Si buscamos un nodo que tenga un texto: s = "texto buscado" expr = u'.//text[contains(., "%s")]'%s.decode('utf-8') Si buscamos un contenido que puede estar como valor de un atributo: expr = u'.//@*[contains(., "%s")]'%s.decode('utf-8')

Si no sabes XPATH, firebug te puede ayudar. Firebug copia la XPATH a cualquier elemento.



Transformando el documento
Podemos transformar el contenido de una página al vuelo para volver a servirla mejorada (inyección semántica, limpieza de marcado, adaptación del contenido al destinatario ...)

Cambiamos el nombre del curso en la misma página: Ponemos en mayúscula sólo la primera letra.

Prueba a volver a mostrar el documento que habías analizado: doc.xml_write

Uso de cabeceras: User-Agent y gzip
A veces el servidor exige unas condiciones: Notes to library developers Please use GZip compression when making API calls (Accept-Encoding: gzip). Bots eat up a lot of bandwidth, which is not free. You must set a descriptive User Agent header (User-Agent: User name/email) Please include your username and wiki or email address. http://www.mediawiki.org/wiki/API:Client_code#API_Access_Libraries

Más ejemplos y más complejos

 * https://github.com/zepheira/amara/tree/master/demo