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.

Soporte de caracteres japoneses y coreanos en Pyhthon.

Obtengo errores de caracteres en python al realizar web scraping.

from requests_html import HTML</p>

<p>with open('list.html', 'r', encoding='cp932', errors='ignore') as html<em>file:
    source = html</em>file.read()
    html = HTML(html=source)</p>

<p>video<em>link = html.find('a', first=True).text
print(video</em>link)
<code>
**La línea que abre en html es esta**
</code>
<dt><a href="https://www.youtube.com/watch?v=OAJn4XRhr10">
(15) アイナ・ジ・エンド (BiSH) / きえないで [OFFiCiAL ViDEO] - YouTube</a>

La salida que obtengo:

(15) �A�C�i�E�W�E�G���h (BiSH) / �����Ȃ��� [OFFiCiAL ViDEO] - YouTube

La salida que deseo:

(15) アイナ・ジ・エンド (BiSH) / きえないで [OFFiCiAL ViDEO] - YouTube

HTML de la lista:


<!DOCTYPE netscape-bookmark-file-1>
<html><link rel="stylesheet" href="styling.css"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Reading List</title>
</head><body><h1>Reading List</h1>
<dl><p>
</p><dt><dt><a href="https://www.youtube.com/watch?v=OAJn4XRhr10">
(15) アイナ・ジ・エンド (BiSH) / きえないで [OFFiCiAL ViDEO] - YouTube</a></dt>

Establecer la codificación en el archivo de python a UTF-8 cambia la salida para peor. (codificación UTF-8 en el archivo de python y conjunto de caracteres UTF-8 en el archivo html)

Establecer el conjunto de caracteres en cp932 y la codificación en el archivo de python en cp932 cambia la salida para peor.

Windows PowerShell

Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.</p>

<p>import sys</p>

<p>sys.getdefaultencoding()</p>

<p>'utf-8'

Tengo la fuente para mostrar los caracteres

Abrirlo en modo de bytes cambia la salida para peor

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Cuando se realiza web scraping en Python, pueden ocurrir errores de caracteres debido a problemas de codificación. Una solución es especificar la codificación correcta al cargar el archivo HTML, pero en este caso, establecer la codificación a cp932 o UTF-8 no resolvió el problema. Otra posible solución es decodificar el texto HTML utilizando la codificación correcta, pero no es ideal en este caso, ya que puede ser difícil determinar la codificación correcta.

    Para mostrar los caracteres correctos, puedes intentar reemplazar las entidades HTML con sus caracteres correspondientes utilizando el módulo html. Aquí tienes un ejemplo:

    import html
    
    with open('list.html', 'r') as html_file:
        source = html_file.read()
        decoded_source = html.unescape(source)
        # o decoded_source = source.encode('utf-8').decode('cp932')  # prueba diferentes combinaciones de codificación y decodificación
        html_obj = HTML(html=decoded_source)
    
    video_link = html_obj.find('a', first=True).text
    print(video_link)
    

    Este código utiliza la función html.unescape() para reemplazar las entidades HTML (<, >, ") con sus caracteres correspondientes. La variable decoded_source contiene el texto HTML decodificado que se puede pasar a la función HTML. Ahora, la variable video_link debería contener el texto correcto.

    Ten en cuenta que este enfoque puede no funcionar en todos los casos, especialmente si el HTML contiene entidades no estándar o si la codificación no es consistente en todo el archivo HTML. En general, se recomienda utilizar la codificación correcta desde la fuente si es posible.

Comments are closed.