2010年8月9日 星期一

自動抓取 Html 的網站編碼

我之前是設計使用者在輸入網址時,也必須輸入網站編碼,但除非從瀏覽器的工作列上選擇「檢視」-> 「編碼」來查看,不然一般使用者是不會在乎網站的編碼,反正能正常顯示就好。於是我必須要加入自動偵測的方式,代替使用者輸入網站編碼。

其實 Java 的  URLConnection class 本身就有提供 getContentEncoding() method 取得網站編碼,但實際操作後,發現 getContentEncoding() 一直回傳 null ,也就是 URLConnection 判斷該網站是未知編碼,這個問題在各大論壇都有其他人發問,但目前仍然沒有解決,故只好自己另外寫程式碼來處理編碼問題。

在 Html 的 Head 內,Meta 標籤內含有通知瀏覽器該選擇何種編碼來檢視網站,範例如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
http-equiv="Content-Type" 時,後方的 content 設定值就會通知瀏覽器該選擇哪種編碼,故只要取得  charset 後方數值,即可得到編碼。

目前的作法是先使用 UTF-8 的編碼解析網站,取得 Meta 標籤內 http-equiv="Content-Type" 時,content 後方的 charset 設定值,再使用取得的編碼重新解析網站,這樣解析出來的網站就不會發生亂碼問題。

此外,我是設定當資料庫內沒有該網站的 Xpath 時,就請使用者複製文章標題來換取 Xpath 。請注意,如果該網站具有簡體中文,則複製文章標題時,不得使用 FireFox 的簡轉繁的套件,避免抓取文字的編碼與 DOM 內的文字編碼不同,造成程式判斷該文章標題不存在。

參考資料:

沒有留言:

張貼留言