首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >还有一个带有重音字符的编码问题(用Python和BeautifulSoup抓取网站)

还有一个带有重音字符的编码问题(用Python和BeautifulSoup抓取网站)
EN

Stack Overflow用户
提问于 2017-02-01 23:44:58
回答 2查看 1.8K关注 0票数 0

(前言:我知道,这个问题已经谈过一百次了,但我还是不明白)

我试图加载html页面并输出文本,尽管我得到了正确的网页,但BeautifulSoup以某种方式破坏了重音字符的编码,这些字符不是前127个ASCII字符的一部分:

代码语言:javascript
复制
# -*- 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 compaero de viaje inesperado hará que cambie de rumbo。胡安·西根预告片。厄尔尼诺症是一种现实的射血药。guila Roja tiene.

但我得到的结果是:

U‘xe1tur se dirige al sur en busca de Estuarda y Gabi,pero un compa\xf1ero de viaje inesperado har\xe1 que cambie de rumbo。胡安·西根预告片。厄尔尼诺症是一种现实的射血药。\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,显然没有成功.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 22:51:43

我相信我终于得到它了..。

代码语言:javascript
复制
>>> 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)

代码语言:javascript
复制
>>> print(div.text)
Sátur se dirige al sur en busca de Estuarda y Gabi, pero
代码语言:javascript
复制
>>> div.text.encode('utf-8')
'S\xc3\xa1tur se dirige al sur en busca de Estuarda y Gabi, pero

我不明白为什么输出显示为\xc3\xa1而不是'á‘。

代码语言:javascript
复制
>>> print div.text.encode('utf-8')
Sátur se dirige al sur en busca de Estuarda y Gabi, pero
代码语言:javascript
复制
>>> blurr = div.text.encode('cp850')
>>> blurr
'S\xa0tur se dirige al sur en busca de Estuarda y Gabi, pero
>>> type(blurr)
<type 'str'>

-->编码为代码页850的Unicode,在Windows下python-shell中使用

代码语言:javascript
复制
>>> print(blurr)
Sátur se dirige al sur en busca de Estuarda y Gabi, pero

-这是对的!

在Kodi中,我可以使用utf-8表示,例如,字符'á‘保存在变量\xc3\xa1中,但是当变量的内容显示为"xbmcgui.Dialog().ok(addonname,blurr)“时,就会在屏幕上显示正确的’á‘.

我也是.

票数 0
EN

Stack Overflow用户

发布于 2017-02-02 07:29:41

代码语言:javascript
复制
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 

退出:

代码语言:javascript
复制
'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...'

使用requestspython3,问题就永远不会出现

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41991943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档