2011-02-15 18 views
1

我有一個腳本需要在通過lxml.HTML()進行解析讀取之前確定字符集。如果找不到它,我會假定ISO-8859-1(這是正常的假設字符集?),並且搜索帶有charset屬性的元標記的html。不過,我不確定最好的方式來做到這一點。我可以嘗試使用lxml創建一個etree,但我不想讀取整個文件,因爲我可能遇到編碼問題。但是,如果我沒有閱讀整個文件,我不能創建一個etree,因爲一些標籤不會被關閉。確定來自html元標記的字符集w/python

我是否應該找到帶有一些奇特字符串下標的元標記,並在找到或讀取了一定數量的行後跳出循環?也許使用低級HTML解析器,例如html.parser?使用python3順便說一句,謝謝。

回答

3

您應該首先嚐試從HTTP標頭中提取編碼。如果它不存在,你應該用lxml解析它。這可能會很棘手,因爲如果charset不匹配,lxml會拋出解析錯誤。解決方法是解碼和編碼忽略未知字符的數據。

html_data=html_data.decode("UTF-8","ignore") 
html_data=html_data.encode("UTF-8","ignore") 

在此之後,你可以通過調用與utf-8編碼lxml.HTML()命令解析。 這樣,您將能夠找到HTML標頭中定義的正確編碼。

找到編碼後,您將不得不用適當的編碼重新解析HTML文檔。

不幸的是,有時候即使在HTML標頭中也可能找不到字符編碼。我建議你只有在這些步驟失敗之後才使用chardet模塊來找到正確的編碼。

+0

謝謝,我不知道有關忽略選項。我已經首先從頭文件中讀取字符集,但發現一些缺少Content-Type頭的W/E原因。 – kryptobs2000 2011-02-15 12:00:33

+0

@ kryptobs2000:好的。只是告訴你:雖然這種方法很容易實現,但Alohci的鏈接解釋了處理文檔的最快算法。所以如果你正在處理大量的文件,你可能更喜歡這樣。 – 2011-02-15 18:02:23