2012-11-11 20 views
3

我使用BeautifulSoup刮瑞典网页。在网页上,我想提取的信息是这样的:美丽的汤,Python和瑞典字符ÅÄ

"Öhman Företagsobligationsfond" 

当我从Python脚本打印信息,它看起来像这样:

"Öhman Företagsobligationsfond" 

我是新来的Python和我已经搜索了答案,并在代码的开头尝试使用,但它不起作用。

我正在考虑从瑞典搬迁来解决这个问题。

+0

您是否检查过您正在解析的HTML文本(在beautifulsoup之前)是否由python正确解码?它可能是源不是UTF-8,或者是UTF-8,但被解码为其他内容。 另外,如果你分享你的代码,你更可能得到有用的帮助。 – onon15

+0

好评。我检查了原始的HTML文本,它看起来像使用charset = iso-8859-1。那我该怎么做? – Jonas

+0

您可以使用原始HTML文本上的'string.decode'来修复。 (或者使用beautifulsoup的'from_encoding'参数,它的作用非常类似) – onon15

回答

3

使用时,只能指定源代码文档的编码。您正在解析的页面可能声明了错误的编码(或者根本没有),因此Beautiful Soup失败。尝试在构建汤时指定编码。这里是一个小例子:

markup = ''' 
<html> 
    <head> 
     <title>Övriga fakta</title> 
     <meta charset="latin-1" /> 
    </head> 
    <body> 
     <h1>Öhman Företagsobligationsfond</h1> 
     <p>Detta är en svensk sida.</p> 
    </body> 
</html> 
''' 

soup = BeautifulSoup(markup) 
print soup.find('h1') 

try: 
    # Version 4 
    soup = BeautifulSoup(markup, from_encoding='utf-8') 
except TypeError: 
    # Version 3 
    soup = BeautifulSoup(markup, fromEncoding='utf-8') 

print soup.find('h1') 

输出从这个是:

<h1>Ãhman Företagsobligationsfond</h1> 
<h1>Öhman Företagsobligationsfond</h1> 

在美丽的汤4中,参数是from_encoding,而在版本3中,参数是fromEncoding

+1

还要确保你的终端可以显示utf-8字符,否则就会显示没有任何工作,因为你的终端不兼容utf-8。 –

+0

正如我上面写的HTML文本是使用iso-8859-1。不知道如何处理这个,但我已经尝试过。汤= BeautifulSoup(内容,from_encoding =“ISO-8859-8”),但后来我得到一个错误“__init __()有一个意想不到的关键字参数'from_encoding'。我也改变了”iso-8859-8“ 8859-8'但它不起作用 – Jonas

+0

对不起,写8859-8本应该是8859-1 – Jonas