(前言:我知道,这个问题已被谈了一百次,但我仍然不明白)
我正在尝试加载一个html页面并输出文本,即使我正确地获取了网页,BeautifulSoup也会以某种方式破坏重音字符的编码,这些字符不是前127个ASCII字符的一部分:
# -*- coding: utf-8 -*-
import sys
from urllib import urlencode
from urlparse import parse_qsl
import re
import urlparse
import json
import urllib
from bs4 import BeautifulSoup
url = "http://www.rtve.es/alacarta/interno/contenttable.shtml?ctx=29010&locale=es&module=&orderCriteria=DESC&pageSize=15&mode=TEXT&seasonFilter=40015"
html=urllib2.urlopen(url).read()
soup = BeautifulSoup(html)
div = soup.find_all("span", class_="detalle")
capitulo_detalle = div[0].text (doesn't work, capitulo_detalle is type str with utf-8, div[0].tex is type unicode)
div[0].text
的输出应该是这样的:
S á tur se dirige al sur en busca de Estuarda y Gabi,pero un compa ñ ero de viaje inesperado har á que cambie de rumbo。 Los hombres de Juan siguen presos。 El enemigo comienza a realizar ejecuciones。 Á guila Roja tiene ...
但我得到的结果是:
u'S \ xe1tur se dirige al sur en busca de Estuarda y Gabi,pero un compa \ xf1ero de viaje inesperado har \ xe1 que cambie de rumbo。 Los hombres de Juan siguen presos 。 El enemigo comienza a realizar ejecuciones。 \ xc1guila Roja tiene ...'
- >我需要更改什么才能获得“正确”的字符?
我知道它必须与这些问题重复,但答案似乎不适用于此: Python and BeautifulSoup encoding issues How to correctly parse UTF-8 encoded HTML to Unicode strings with BeautifulSoup?
我还阅读了有关unicode,utf-8,ascii的典型文档,例如: https://docs.python.org/3/howto/unicode.html,显然没有成功......
答案 0 :(得分:0)
我相信我终于明白了......
>>> div = soup.find("span", class_="detalle")
>>> div.text
u'S\xe1tur se dirige al sur en busca de Estuarda y Gabi, pero
--->这是unicode,\ xe1是'á'(http://www.utf8-chartable.de/unicode-utf8-table.pl?start=4096&number=128&names=-&utf8=string-literal)的'代码'
>>> print(div.text)
Sátur se dirige al sur en busca de Estuarda y Gabi, pero
---> 'print'正确评估unicode代码点
>>> div.text.encode('utf-8')
'S\xc3\xa1tur se dirige al sur en busca de Estuarda y Gabi, pero
--->根据上面引用的URL给出的表格,Unicode被编码为utf-8。我不明白为什么输出显示为\ xc3 \ xa1而不是'á'。
>>> print div.text.encode('utf-8')
Sátur se dirige al sur en busca de Estuarda y Gabi, pero
--->我不明白为什么印刷现在将它评估为一个奇怪的符号......
>>> blurr = div.text.encode('cp850')
>>> blurr
'S\xa0tur se dirige al sur en busca de Estuarda y Gabi, pero
>>> type(blurr)
<type 'str'>
---&GT; Unicode编码到代码页850,在Windows下的python-shell中使用
>>> print(blurr)
Sátur se dirige al sur en busca de Estuarda y Gabi, pero
---&GT;最后,这是对的!
在Kodi我可以使用utf-8表示,例如字符“á”在变量中保存为\ xc3 \ xa1,但是当显示变量的内容时,例如“xbmcgui.Dialog()。ok(addonname,blurr)”,它会在屏幕上正确显示'A' ......
Und sowas soll man wissen ......
答案 1 :(得分:-1)
import requests
from bs4 import BeautifulSoup
url = "http://www.rtve.es/alacarta/interno/contenttable.shtml?ctx=29010&locale=es&module=&orderCriteria=DESC&pageSize=15&mode=TEXT&seasonFilter=40015"
html=requests.get(url)
soup = BeautifulSoup(html.text, 'lxml')
div = soup.find("span", class_="detalle")
capitulo_detalle = div.text
出:
'Sátur se dirige al sur en busca de Estuarda y Gabi, pero un compañero de viaje inesperado hará que cambie de rumbo. Los hombres de Juan siguen presos. El enemigo comienza a realizar ejecuciones. Águila Roja tiene...'
使用requests
和python3
,问题永远不会出现