2012-01-30 23 views
4

我正在使用BeautifulSoup從網頁中抓取數據。我想將網站數據與.txt文檔中的文本進行比較。但是,我似乎有編碼問題。Python編碼問題:度符號和其他

該網站有使用beautifulSoup文「熱烘箱中以400°」的文本也出現這樣在「查看源」

該網站讀取(任何HTML實體。):

source = "my url".read() 
.... 
soup = BeautifulSoup(source)  

通過將新的文本文檔編碼爲「無UTF-8編碼」創建文本文檔。然後,我從網站上覆制粘貼「熱烤箱到400°」到文本文檔並保存。當我比較兩個字符串

文本文件被讀作

f = codecs.open('myfilename', encoding='utf-8') 

,他們是不相等的,但我希望他們能。看看發生了什麼事情:在Eclipse中,我將兩個文本分開,然後在調試模式下查看變量,我發現BeautifulSoup的度數標誌顯示爲\ xc2 \ xb0。文本文檔中的度數標誌僅顯示爲\ xb0。

爲什麼,我該如何解決?我遇到了很多特殊字符的問題,所以我需要一個通用的解決方案。另外,我會將幾個網站的數據複製到文本文檔中。

+0

http://stackoverflow.com/search?q=[python]+beautifulsoup+encoding – 2012-01-30 05:46:18

+0

你知道你的文本文件的編碼,並正在使用它,但網站的編碼沒有被考慮在內。基本上,如果它們使用相同的編碼,或者比較unicode字符串(需要獲取字節並使用正確的編碼解釋它們),那麼比較字節(就像你在做的那樣)是有意義的。 – Cameron 2012-01-30 05:56:39

+0

儘管您付出了努力,但您的文本文檔似乎並未以UTF-8格式顯示。或者HTML以某種方式進行了雙重編碼(這並不完全清楚你如何診斷差異;如果你還想添加信息,簡單的十六進制文件轉儲將有所幫助)。 – tripleee 2012-01-30 06:12:22

回答

1

看起來像美麗的湯沒有它所需要的正確檢測編碼。你可以通過用BeautifulSoup(source,fromEncoding ='UTF-8')替換BeautifulSoup(source)來給出提示。 「Beautiful Soup Gives You Unicode, Dammit」上有更多選項和信息。

的字節「\ XC2 \ XB0」是你當Unicode代碼點U + 00B0的UTF-8編碼被誤認爲是美麗的湯的不得已的猜測在編碼,它是Windows 1252

+0

是的,謝謝,這是非常多的事情,一個轉折點。在創造湯之前,我正在改變來源。美麗然後不再識別編碼。看到我上面的評論開始「好吧,想通了」。 – user984003 2012-01-30 06:32:27