| You are here: Inicio > Inmersión en Python > Procesamiento de HTML > Presentación de sgmllib.py | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
El procesamiento de HTML se divide en tres pasos: obtener del HTML sus partes constitutivas, manipular las partes y reconstruirlas en un documento HTML. El primero paso lo realiza sgmllib.py, una parte de la biblioteca estándar de Python.
La clave para comprender este capítulo es darse cuenta de que HTML no es sólo texto, sino texto estructurado. La estructura se deriva de una secuencia más o menos jerárquica de etiquetas de inicio y de final. Normalmente no trabajará con HTML de esta manera; trabajará con él de forma textual en un editor de texto, o visualmente en un navegador o herramienta de autoedición. sgmllib.py presenta HTML de forma estructural.
sgmllib.py contiene una clase importante: SGMLParser. SGMLParser disgrega HTML en partes útiles, como etiquetas de inicio y fin. Tan pronto como consigue obtener algunos datos, llama a un método de sí misma basándose en lo que encontró. Para utilizar este analizador, derivará la clase SGMLParser para luego reemplazar estos métodos. A esto me refería cuando dije que presenta HTML de forma estructural: la estructura de HTML determina la secuencia de llamadas a métodos y los argumentos que se pasarán a cada uno.
SGMLParser disgrega HTML en 8 tipos de dato, e invoca métodos diferentes para cada uno de ellos:
| Python 2.0 sufría un fallo debido al que SGMLParser no podía reconocer declaraciones (no se llamaba nunca a handle_decl), lo que quiere decir que se ignoraban los DOCTYPE sin advertirlo. Esto quedó corregido en Python 2.1. | |
sgmllib.py incluye una batería de pruebas para ilustrarlo. Puede ejecutar sgmllib.py pasando el nombre de un documento HTML en la línea de órdenes y esto imprimirá las etiquetas y otros elementos a medida que los reconozca. Esto lo hace derivando la clase SGMLParser y definiendo unknown_starttag, unknown_endtag, handle_data y otros métodos para que se limiten a imprimir sus argumentos.
| En el IDE ActivePython para Windows puede especificar argumentos en la línea de órdenes desde el cuadro de diálogo “Run script”. Si incluye varios argumentos sepárelos con espacios. | |
Aquí hay un fragmento de la tabla de contenidos de la versión HTML de este libro. Por supuesto las rutas de usted pueden variar (si no ha descargado la versión HTML del libro, puede verla en http://diveintopython.org/).
c:\python23\lib> type "c:\downloads\diveintopython\html\toc\index.html"
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Dive Into Python</title>
<link rel="stylesheet" href="diveintopython.css" type="text/css">
... se omite el resto del fichero para abreviar ...
Al pasar esto por la batería de pruebas de sgmllib.py se obtiene esta salida:
c:\python23\lib> python sgmllib.py "c:\downloads\diveintopython\html\toc\index.html" data: '\n\n' start tag: <html lang="en" > data: '\n ' start tag: <head> data: '\n ' start tag: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" > data: '\n \n ' start tag: <title> data: 'Dive Into Python' end tag: </title> data: '\n ' start tag: <link rel="stylesheet" href="diveintopython.css" type="text/css" > data: '\n ' ... se omite el resto de la salida para abreviar ...
Aquí tiene la planificación del resto del capítulo:
Por el camino aprenderá también que existen locals, globals y cómo dar formato a cadenas usando un diccionario.
[4] processing instruction (PI)
<< Procesamiento de HTML |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Extracción de datos de documentos HTML >> |