spider JAVA如何判斷網頁編碼

2021-08-27 10:48:11 字數 1517 閱讀 2955

前言

最近做乙個搜尋專案,需要爬取很多**獲取需要的資訊。在爬取網頁的時候,需要獲得該網頁的編碼,不然的話會發現爬取下來的網頁有很多都是亂碼。分析

一般情況下,網頁頭資訊會指定編碼,可以解析header或者meta獲得charset。但有時網頁並沒沒有指定編碼,這時就需要通過網頁內容檢測編碼格式,通過調研,最好用的還是cpdetector。

cpdetector自動檢測文字編碼格式,誰先返回非空,就以該結果為字元編碼。內建了一些常用的探測實現類,這些探測實現類的例項可以通過add方法加進來,如

1、首先,可從header中解析charset

網頁頭資訊中的content-type會指定編碼,如圖:

可以通過分析header,查詢字元編碼。

map> map =urlconnection.getheaderfields();

setkeys =map.keyset();

iterator

iterator =keys.iterator();

//遍歷,查詢字元編碼

string key = null

;string tmp = null

;while

(iterator.hasnext()) }}

2、其次,可從網頁meta中解析出charset

正常情況下,在寫網頁時,會指定網頁編碼,可在meta中讀出來。如圖:

首先獲取網頁流,因為英文和數字不會亂碼,可以解析meta,獲得charset。

stringbuffer sb = new

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);

}

3、當使用1、2解析不出編碼時,使用cpdetector根據網頁內容探測出編碼格式

可以新增多個編碼探測例項:

public

static

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...