Estoy tratando de raspar una página en japonés con python, curl y BeautifulSoup. A continuación, guardo el texto en una base de datos MySQL que usa codificación UTF-8 y visualizo los datos resultantes usando Django.Raspado correcto y visualización de caracteres japoneses con Python Django BeautifulSoup y Curl
Aquí es un ejemplo de URL:
Tengo una función que utilizo para extraer el HTML como una cadena:
def get_html(url):
c = Curl()
storage = StringIO()
c.setopt(c.URL, str(url))
cookie_file = 'cookie.txt'
c.setopt(c.COOKIEFILE, cookie_file)
c.setopt(c.COOKIEJAR, cookie_file)
c.setopt(c.WRITEFUNCTION, storage.write)
c.perform()
c.close()
return storage.getvalue()
luego lo paso a BeautifulSoup:
html = get_html(str(scheduled_import.url))
soup = BeautifulSoup(html)
Luego se analiza y se guarda en una base de datos. Luego uso Django para enviar los datos a json. Aquí es la vista que estoy usando:
def get_jobs(request):
jobs = Job.objects.all().only(*fields)
joblist = []
for job in jobs:
job_dict = {}
for field in fields:
job_dict[field] = getattr(job, field)
joblist.append(job_dict)
return HttpResponse(dumps(joblist), mimetype='application/javascript')
El resultado muestra la página de código de bytes, tales como:
XE3 \ x82 \ xb7 \ XE3 \ x83 \ XA3 \ XE3 \ x83 \ Xaa \ XE3 \ x82 \ xb9 \ xe3 \ x83 \ x88
\ xe8 \ x81 \ xb7 \ xe5 \ x8b \ x99 \ xe5 \ x86 \ x85 \ xe5 \ xae \ xb9
\ xe3 \ x82 \ xb7 \ xe3 \ x82 \ xb9 \ xe3 \ x82 \ xb3 \ xe3 \ x82 \ xb7 \ xe3 \ x82 \ xb9 \ xe3 \ x83 \ x86 \ xe3 \ x83 \ xa0 \ xe3 \ x82 \ xba \ xe3 \ x81 \ xae \ xe3 \ x82 \ xb3 \ xe3 \ x83 \ xa9 \ xe3 \ x83 \ x9c \ xe3 \ x83 \ xac \ xe3 \ x83 \ xbc \ xe3 \ x82 \ xb7 \ xe3 \ x83 \ xa7 \ xe3 \ x83 \ xb3 \ xe4 \ xba \ x8b \ xe6 \ xa5 \ xad \ xe9 \ x83 \ xa8 \ xe3 \ x81 \ xa7 \ xe3 \ x81 \ xaf \ xe3 \ x80 \ x81 \ xe4 \ xba \ xba \ xe3 \ x82 \ x92 \ xe4 \ xb8 \ xad \ xe5 \ xbf \ x83 \ xe3 \ x81 \ xa8 \ xe3 \ x81 \ x97 \ xe3 \ x81 \ x9f \ xe3 \ x82 \ xb3 \ xe3 \ x83 \ x9f \ xe3 \ x83 \ xa5 \ xe3 \ x83 \ x8b \ xe3 \ x82 \ xb1 \ xe3 \ x83 \ xbc \ xe3 \ x82 \ xb7 \ xe3 \ x83 \ xa7 \ xe3 \ x83 \ xb3 \ xe3 \ x81 \ xab \ xe3 \ x82 \ x88 \ xe3 \ x82 \ x8a \ xe3 \
En lugar de japonés.
He estado investigando todo el día y he convertido mi base de datos a utf-8, intenté descifrar el texto de iso-8859-1 y codificación a utf-8.
Básicamente no tengo idea de lo que estoy haciendo y agradecería cualquier ayuda o sugerencia que pueda obtener para poder evitar pasar otro día tratando de resolver esto.
Olvidó decirle a Beautiful Soup la codificación. Obténgalo de los encabezados de respuesta. –
Creo que BeautifulSoup establece automáticamente la codificación basada en la metaetiqueta de la página, de acuerdo con esta http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html "Una etiqueta puede especificar una codificación para el documento. " and soup.originalEncoding outputs 'iso-8859-1' –
Usted está asumiendo que la página * tiene * una etiqueta META para leer. –