2012-09-13 16 views
7

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:

https://www.cisco.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.showJob&RID=930026&CurrentPage=180

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.

+0

Olvidó decirle a Beautiful Soup la codificación. Obténgalo de los encabezados de respuesta. –

+0

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' –

+0

Usted está asumiendo que la página * tiene * una etiqueta META para leer. –

Respuesta

0

Los ejemplos que ha publicado son de alguna manera la representación ascii de la cadena. Necesita convertir esto en una cadena de unicode de python. Usualmente puede usar string encoding and decoding para hacer el trabajo. Si no está seguro de cuál es la forma correcta, simplemente experimente con ella en la consola de Python.

Pruebe para obtener la cadena de python unicode. Esto debería mostrarse correctamente en las plantillas de Django, puede guardarse en el DB, etc. Como ejemplo, también puede simplemente probar print my_new_string y verá que está generando caracteres japoneses.

+0

no tuvo suerte con esto. Puedo obtener la cadena HTML original para mostrar los caracteres japoneses cuando lo imprimo en la consola, lo mejor que puedo hacer con la salida de beautifulsoup es obtener personajes originales como "€? ƒ?a El ‚ ‚ · ã §Recepción§ ƒ ƒ ³No ‘ €
€ € ã ã ƒ »人 äº y lsaquo; äº y lsaquo; A & lsaquo; ™ æ & lsaquo, & hellip, å½ “

ã €? Æ & permil; € å ± ž es ƒ ¨ 署 å ?? " –

Cuestiones relacionadas