1. 程式人生 > >【垂直搜尋引擎搭建11】使用htmlparser獲取頁面的字元編碼encoding

【垂直搜尋引擎搭建11】使用htmlparser獲取頁面的字元編碼encoding

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