es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El cliente imapclient no está leyendo correctamente un correo electrónico.

Estoy intentando importar en Python una tabla HTML dentro de un correo electrónico.

He intentado el siguiente script:

HOST = 'imap.gmail.com'
USERNAME = nombre_de_usuario
PASSWORD = contraseña
ssl = True

server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)

select_info = server.select_folder('INBOX')
messages = server.search(['FROM', direccion_de_envio])

if len(messages) > 0:
   for mail_id, data in server.fetch(messages,['ENVELOPE','BODY[TEXT]']).items():
       envelope = data[b'ENVELOPE']
       body = data[b'BODY[TEXT]']

soup = BeautifulSoup(body)
table = soup.findall('table')
df = pd.read_html(str(table))[0]

El script funciona bien, pero obtengo algunos ” = ” aleatorios y un ” <= /td> ” insertados dentro de la tabla.
Este es un ejemplo de la salida del dataframe con errores en amarillo
enter image description here

Este es un ejemplo de la tabla original del correo electrónico:
enter image description here

Creo que el error está en los comandos de IMAPClient (y no en BS parsing o pandas) porque si inspecciono el HTML dentro de la variable “body” encuentro los errores ya presentes allí.

¿Qué estoy haciendo mal? Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que los errores se deban a problemas de codificación o formato dentro del correo electrónico en sí. Es posible que desee intentar decodificar el texto del cuerpo utilizando el método de codificación correspondiente (por ejemplo, UTF-8) antes de analizarlo con BeautifulSoup. Además, podría intentar utilizar el paquete email en Python para analizar el correo electrónico y extraer directamente el HTML del mensaje, en lugar de depender del comando BODY[TEXT] de IMAPClient. Finalmente, si ninguna de estas soluciones funciona, es posible que el problema esté en el cliente de correo electrónico del remitente y en la forma en que se está componiendo la tabla en el correo electrónico. En ese caso, es posible que necesite limpiar manualmente el HTML antes de analizarlo.

Comments are closed.