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
Este es un ejemplo de la tabla original del correo electrónico:
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.
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 comandoBODY[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.