2012-11-11 29 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