Scraping del horario de la LWSC
De WikiEducator
Búsquedas en el documento
# -*- coding: utf-8 -*- from amara.bindery import html doc = html.parse('horario.html') # Los días están marcados en tablas que tienen un atributo summary dias = doc.xml_select(u'//table[@summary]') for d in dias: print d.summary for charla in doc.xml_select(u'//td[@title][@class="python"]'): print charla.title, ' - ', charla # Podemos hacer lo mismo con menos xpath y más python ... for charla in doc.xml_select(u'//td'): if charla.title and charla['class'] == 'python': print charla.title, '-->>', charla # ¿A qué día pertenece una charla que hemos seleccionado? tabla = charla.xml_select(u'ancestor::table')[0] if '10' in tabla.summary: print 'Esta actividad es el jueves'
Búsqueda de actividades por horas
# -*- coding: utf-8 -*- import datetime from amara.bindery import html doc = html.parse('http://www.libresoftwareworldconference.com/programa/horario.html') def busca(hora, doc): charlas = doc.xml_select(u'//td[@title][@class]') for ch in charlas: inicio, fin = ch.title.split('-') if esta_entre(inicio, fin , hora): print ch def conv_hora(cadena): h, m = cadena.split(':') return datetime.time(int(h), int(m)) def esta_entre(inicio, fin, hora): return conv_hora(inicio) <= conv_hora(hora) < conv_hora(fin) busca('13:00', doc)
Transformación del documento
Vamos a borrar a Joomla del calendario
from amara.bindery import html from amara.writers import lookup from amara.tree import text HTML_W = lookup("html") doc = html.parse('horario.html') joomlas = doc.xml_select(u'//td[@class="joomla"]') for j in joomlas: for ch in j.xml_children: j.xml_remove(ch) j.xml_append(text(u' ')) open('nuevo_horario.html', 'w').write(doc.xml_encode(HTML_W))