Foros del Web » Programando para Internet » Python »

[Python] Leer archivo HTML ?

Estas en el tema de [Python] Leer archivo HTML ? en el foro de Python en Foros del Web. Que tal queridos amigos. Me ha surgido una duda y que mejor que venir a preguntarle a la gente que realmente sabe :) Me estoy ...
  #1 (permalink)  
Antiguo 30/09/2010, 20:57
 
Fecha de Ingreso: abril-2008
Ubicación: Córdoba
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 4
[Python] Leer archivo HTML ?

Que tal queridos amigos.
Me ha surgido una duda y que mejor que venir a preguntarle a la gente que realmente sabe :)

Me estoy iniciando en python, y tengo un mini proyecto en mente (esas ideas que se pasan por la cabeza y que siempre surge la curiosidad de realizarlas) y para cumplirlo necesito PODER SABER como leer un archivo html e imprimir sus lineas. (En realidad no es imprimir sus lineas sino modificarlas, pero un ejemplo de imprimir las lineas me vendría bárbaro).

He intentado de la siguiente manera:

Código Python:
Ver original
  1. archivo = open('archivo.html',"r")
  2.  
  3. for lineas in archivo.readlines() :
  4.     print lineas
  5.  
  6. archivo.close()

Ejecuto y al momento de imprimir las lineas me sale lo siguiente :



Como que los carácteres no logran decodificarse, como si tuviesen un formato diferente, o algo por el estilo. Alguien me podría ayudar ?

Muchas gracias !
  #2 (permalink)  
Antiguo 30/09/2010, 22:00
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: [Python] Leer archivo HTML ?

Definitivamente es el encoding, tu código esta bien, la imagen esta muy pequeña para verla.

Ok hagamos una prueba simple, esto requerirá Internet:
Código Python:
Ver original
  1. import urllib2
  2.  
  3. f = urllib2.urlopen("http://www.google.com")
  4. print f.read()
  5. f.close()
Si ves bien los caracteres entonces tu archivo es el que tiene otro encoding, si los vez mal probablemente sea problema de tu editor, pero seria cuestión de configurarlo.
  #3 (permalink)  
Antiguo 30/09/2010, 22:12
 
Fecha de Ingreso: abril-2008
Ubicación: Córdoba
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: [Python] Leer archivo HTML ?

Se lee perfectamente.
Como haría entonces para poner bien el encoding ? Porque se vé que es mi archivo, como tendría que hacer ?
  #4 (permalink)  
Antiguo 30/09/2010, 22:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: [Python] Leer archivo HTML ?

Depende que enconding este usando el archivo.
Ejemplo con un archivo utf-8

Código Python:
Ver original
  1. #coding: utf-8
  2. f = open("archivo.html", "r")
  3. print f.read().decode("utf-8")
  4. f.close()
  #5 (permalink)  
Antiguo 30/09/2010, 23:29
 
Fecha de Ingreso: abril-2008
Ubicación: Córdoba
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: [Python] Leer archivo HTML ?

Mira, me has dado una gran ayuda. Pero ahora el tema es que busqué en internet como averiguar el encoding de un archivo de texto y se dice que es imposible, o que existen aplicaciones para averiguarlo pero que no lo detectan perfectamente.

Te paso a comentar que el archivo con el que intento trabajar es un "LOG" de historiales de conversación que se guardan con el Messenger Plus. Al principio del archivo dice lo siguiente :

Cita:
<?xml version="1.0" encoding="UTF-16LE"?>
Intenté hacerlo con UTF-16LE y UTF-16, pero lamentablemente me tira un error cuando intento ejecutar el script que dice lo siguiente :

Cita:
There's an error in your program:

'utf16' codec can't decode byte 0x0a in position 122: trucated data.
Ese es el error que me tira, entonces he intentado con UTF-8 pero directamente éste ultimo ya no me lee la data (digamos, me tira los símbolos "raros").

Espero que puedas ayudarme, un saludo amigo y muchas gracias por la gran ayuda que me haz dado hasta ahora !
  #6 (permalink)  
Antiguo 01/10/2010, 08:24
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Python] Leer archivo HTML ?

Con razón UTF8 no lo muestra correctamente.
UTF-16 usa 2 bytes para cada caracter, UTF-8 usa un largo variable: 1 byte para los caracteres del código ASCII, 2 bytes para caracteres latinos y hasta 4 bytes según el caracter. Son completamente incompatibles.

Con respecto a la detección, fijate que incluso Windows tuvo errores con esto en el pasado (http://en.wikipedia.org/wiki/Bush_hid_the_facts). Es realmente difícil la detección de UTF-16.

El error te está diciendo que uno de los bytes no forma un caracter válido codificado en UTF-16. Según la Wikipedia, esto es grave:
Cita:
Iniciado por http://en.wikipedia.org/wiki/Utf-8
If a byte is missing from UTF-16, the whole rest of the string will be meaningless text.
Habría que ver qué cuernos hay en esa posición del archivo. Siendo un registro de conversación quizás no quieras dárnoslo, pero ayudaría a encontrar una solución al problema.


saludos.
  #7 (permalink)  
Antiguo 01/10/2010, 10:06
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: [Python] Leer archivo HTML ?

Lo intente con mis conversaciones del messenger plus y esto fue lo que me funciono:
Código Python:
Ver original
  1. f = open(r"Archivo.html", "r")
  2. print f.read().decode("utf-16le")
  3. f.close()
  #8 (permalink)  
Antiguo 01/10/2010, 10:42
 
Fecha de Ingreso: abril-2008
Ubicación: Córdoba
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: [Python] Leer archivo HTML ?

Excelente respuesta, tema solucionado.

Muchas gracias a AlvaroG y a razpeitia. Un saludo amigos y una vez mas se los agradezco !

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:59.