Diferencia entre revisiones de «LSWC scraping the web/taller scraping lwsc 2011/horario lwsc»
De WikiEducator
(Página creada con '{{MiTitulo | Scraping del horario de la LWSC == Búsquedas en el documento == <source lang="python"> # -*- coding: utf-8 -*- from amara.bindery import html doc = html.parse('…') |
|||
(2 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
− | {{MiTitulo | Scraping del horario de la LWSC | + | {{MiTitulo | Scraping del horario de la LWSC}} |
== Búsquedas en el documento == | == Búsquedas en el documento == | ||
Línea 13: | Línea 13: | ||
for d in dias: | for d in dias: | ||
− | + | print d.summary | |
for charla in doc.xml_select(u'//td[@title][@class="python"]'): | 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 ... | # Podemos hacer lo mismo con menos xpath y más python ... | ||
for charla in doc.xml_select(u'//td'): | 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? | # ¿A qué día pertenece una charla que hemos seleccionado? | ||
tabla = charla.xml_select(u'ancestor::table')[0] | tabla = charla.xml_select(u'ancestor::table')[0] | ||
if '10' in tabla.summary: | if '10' in tabla.summary: | ||
− | + | 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> | ||
Línea 42: | Línea 69: | ||
for j in joomlas: | 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)) | open('nuevo_horario.html', 'w').write(doc.xml_encode(HTML_W)) | ||
</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))