前言
最近做乙個搜尋專案,需要爬取很多**獲取需要的資訊。在爬取網頁的時候,需要獲得該網頁的編碼,不然的話會發現爬取下來的網頁有很多都是亂碼。分析
一般情況下,網頁頭資訊會指定編碼,可以解析header或者meta獲得charset。但有時網頁並沒沒有指定編碼,這時就需要通過網頁內容檢測編碼格式,通過調研,最好用的還是cpdetector。
cpdetector自動檢測文字編碼格式,誰先返回非空,就以該結果為字元編碼。內建了一些常用的探測實現類,這些探測實現類的例項可以通過add方法加進來,如
1、首先,可從header中解析charset
網頁頭資訊中的content-type會指定編碼,如圖:
可以通過分析header,查詢字元編碼。
map> map =urlconnection.getheaderfields();2、其次,可從網頁meta中解析出charsetsetkeys =map.keyset();
iterator
iterator =keys.iterator();
//遍歷,查詢字元編碼
string key = null
;string tmp = null
;while
(iterator.hasnext()) }}
正常情況下,在寫網頁時,會指定網頁編碼,可在meta中讀出來。如圖:
首先獲取網頁流,因為英文和數字不會亂碼,可以解析meta,獲得charset。
stringbuffer sb = new3、當使用1、2解析不出編碼時,使用cpdetector根據網頁內容探測出編碼格式stringbuffer();
string line;
try in.close();
} catch (exception e)
string htmlcode =sb.tostring();
//解析html原始碼,取出區域,並取出charset
string strbegin = ";
string strend = ">";
string strtmp;
int begin =htmlcode.indexof(strbegin);
int end = -1;
intinttmp;
while (begin > -1)
}htmlcode =htmlcode.substring(begin);
begin =htmlcode.indexof(strbegin);
}
可以新增多個編碼探測例項:
publicstatic
void getfileencoding(url url) throws
malformedurlexception, ioexception
}
上不了網,如何判斷
1 ping 127.0.0.1 或者 ping localhost ping 127.0.0.1 先檢查tcp ip協議棧是否正常2 ping 192.168.1.1 看看連線路由器能不能連線成功 親測,我把連線到路由器的網線拔了,就是651錯誤 20140817再次出現此錯誤。計算機 管理 裝置...
如何判斷THIS指向?
什麼是this?this是用來做什麼的?這是首先我們必須知道的 this它是js的乙個關鍵字,用來指向某乙個物件 如何判斷this指向?函式 方法 內 一種以函式的方式呼叫 不帶.this指向window 一種以方法的形式呼叫 函式名前面帶.this指向點前面的 函式 方法 外,this指向wind...
如何判斷素數
為乙個不太懂程式設計的菜姬師姐解釋如何判斷素數。題目 計算大於10000查起的第五個素數 原話,語句有歧義吧 include include int flag int x 自定義判斷乙個數是不是素數的函式 return 1 走完前面的語句都沒有找到除1之外的因子數 int main if cnt 5...