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.

Error de codificación al raspar de forma asincrónica un sitio web.

Tengo el siguiente código aquí:

import aiohttp
import asyncio
from bs4 import BeautifulSoup

<p>async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://www.pro-football-reference.com/years/2021/defense.htm') as response:
            soup = BeautifulSoup(await response.text(), features="lxml")
            print(soup)</p>

<p>asyncio.run(main())

Pero me da el error UnicodeDecodeError: el códec 'utf-8' no puede decodificar el byte 0xdf en la posición 2170985: byte de continuación no válido en la línea await response.text(). Creo que el problema es que la dirección URL termina en .htm en lugar de .com.

¿Hay alguna forma de decodificarlo?
Nota: No me gustaría utilizar response.read().

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de decodificar la respuesta sin usar response.read(). Puedes pasar la codificación de la respuesta como parámetro al método response.text().

    Por ejemplo, si la codificación de la respuesta es ISO-8859-1, puedes cambiar la línea await response.text() a await response.text(encoding='ISO-8859-1').

    Alternativamente, puedes intentar establecer la codificación a utf-8 e ignorar cualquier error usando errors='ignore' de la siguiente manera: await response.text(encoding='utf-8', errors='ignore'). Esto se asegurará de que cualquier caracter inválido sea simplemente ignorado y no cause un error.

    En general, es una buena idea verificar primero la codificación de la respuesta, lo cual puedes hacer mirando el encabezado Content-Type de la respuesta.

Comments are closed.