2013-02-25 20 views
3

我想要做的事: 我從數據庫中獲取URI列表並下載它們, 去除停用詞和計數這樣的詞語出現在頻率 然後嘗試保存在mongodb中。蟒蛇 - 從網站識別字符編碼

問題: 當我試圖將結果保存在數據庫中,我得到了錯誤 bson.errors.invalidDocument:該文件必須是有效的UTF-8

這似乎是有關當我正在處理網頁時,代碼'\ xc3someotherstrangewords','\ xe2something' 我嘗試刪除標點符號,但無法刪除重音符號,因爲我會得到一個錯誤的詞。

我已經嘗試過 我試圖通過從網頁 我試圖利用在chardet

利用re.compile(R「[^ A-ZA頭識別的字符編碼-Z]「)和/或unicode(變量,'ascii','忽略');
對非英語語言不利,因爲它們刪除了重音符號。

我想知道的是:
人知道如何識別字符,並轉換成正確的字/編碼?
例如從網頁「\ XE2」得到這個和翻譯爲「A」

(英語不是我的第一語言,所以請原諒我) 編輯:如果有人想看到source code

+1

你真的想讀[Python的Unicode指南(http://docs.python.org/2/howto/unicode.html)和[喬爾上Unicode上的軟件](http://www.joelonsoftware.com/articles/Unicode.html)。不知道網站使用的編碼是什麼,這很難回答。 – 2013-02-25 18:43:28

+0

我以前見過Python Unicode Howto,但是謝謝,我會看看Joel的文章。 – raphaeljlps 2013-02-25 21:10:14

回答

3

這是不容易找出網站的正確字符編碼,因爲標題中的信息可能是錯誤的。 BeautifulSoup在猜測字符編碼方面做得非常好,並自動將其解碼爲Unicode。

from bs4 import BeautifulSoup 
import urllib 

url = 'http://www.google.de' 
fh = urllib.urlopen(url) 
html = fh.read() 
soup = BeautifulSoup(html) 

# text is a Unicode string 
text = soup.body.get_text() 
# encoded_text is a utf-8 string that you can store in mongo 
encoded_text = text.encode('utf-8') 

又見答案this question.

+0

謝謝,我會試試這個。 – raphaeljlps 2013-02-25 21:08:28

+0

嗯,我認爲這個解決方案有效,但是我發現問題,wordpunct_tokenize將字符'\ xe2 \ xc2'分隔成'\ xe2','\ xc2' – raphaeljlps 2013-02-27 10:45:54

+0

好吧,美麗的東西真的很棒,我認爲我發現問題,當我刪除口音時,出現問題。 – raphaeljlps 2013-03-06 21:08:54