Diferencia entre revisiones de «LSWC scraping the web/taller scraping lwsc 2011/horario lwsc»
De WikiEducator
m |
|||
Línea 27: | Línea 27: | ||
if '10' in tabla.summary: | if '10' in tabla.summary: | ||
print 'Esta actividad es el jueves' | print 'Esta actividad es el jueves' | ||
+ | </source> | ||
+ | |||
+ | == Búsqueda de actividades por horas == | ||
+ | <source lang="python"> | ||
+ | # -*- 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) | ||
</source> | </source> | ||
Última revisión de 13:16 10 nov 2011
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))