【垂直搜尋引擎搭建11】使用htmlparser獲取頁面的字元編碼encoding
阿新 • • 發佈:2019-01-02
1,確定目標。對於html頁面來說,一般都有確定編碼的語句:
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
可以通過這一行的特徵來取出網頁的編碼。
2,選出特徵。
1)它是meta標籤
2)具有http-equiv屬性值為Content-Type
3)將屬性content中的值取出,先採用“;”分拆取第二個元素,再採用“=”分拆取第二個元素
3,一切就緒,編碼實現。通過目標的選取,以及特徵的勾畫,已經可以找到解決方法了,像上一篇htmlparser中filter使用實戰中講的類似,還是採用AndFilter、NodeFilter以及HasAttributeFilter實現,程式碼如下:
package org.algorithm;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.TagNode;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
public class getEncoding {
//<meta http-equiv="Content-Type" content="text/html;charset=gb2312" /> //HTML編碼
public static String getContentEncoding(String url) throws ParserException, IOException ,UnsupportedEncodingException{
String encoding = "" ;
try{
Parser parser = new Parser(url); //解析url連結
NodeFilter filter = new AndFilter(new TagNameFilter("meta"),new HasAttributeFilter("http-equiv","Content-Type"));//獲取meta標籤下的http-equiv屬性
NodeList nodelist = parser.extractAllNodesThatMatch(filter);
if(nodelist != null){
TagNode list = (TagNode)nodelist.elementAt(0);
encoding = list.getAttribute("content").split(";")[1].trim();//將content的內容看成陣列,使用split(";")[1]通過分號劃分來獲得陣列中的第1個元素“charset=gb2312”,第0個元素是“text/html”
encoding = encoding.split("=")[1].trim();//仍然使用split()[]通過等於號來進行劃分,獲得陣列中的第1個元素“gb2312”,第0個元素是“charset”
}
}catch(ParserException e){
e.printStackTrace();
}
return encoding;
}
public static void main(String[] args) throws ParserException, IOException, UnsupportedEncodingException {
String url="http://news.baidu.com/";
String encoding = getContentEncoding(url);
System.out.print(encoding);
}
}
Output:
gb2312