lexy

          支持開源,尊重他人的勞動!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            17 隨筆 :: 0 文章 :: 9 評論 :: 0 Trackbacks

          httpclient+nekohtml?解析HTML

          import org.cyberneko.html.parsers.DOMParser;
          import org.xml.sax.InputSource;
          import org.xml.sax.SAXException;
          import org.w3c.dom.Document;
          import org.apache.commons.httpclient.HttpClient;
          import org.apache.commons.httpclient.HttpException;
          import org.apache.commons.httpclient.HttpStatus;
          import org.apache.commons.httpclient.methods.GetMethod;

          import java.io.InputStream;
          import java.io.IOException;

          public class Html2XML {
          ??? private int connectionTimeout = 5000;
          ??? private int soTimeout = 12000;
          ??? private String proxyHost = null;
          ??? private int proxyPort;

          ??? public Document getDocument(String url) {
          ??????? HttpClient client = new HttpClient();
          ??????? if (proxyHost != null) {
          ??????????? client.getHostConfiguration().setProxy(proxyHost, proxyPort);
          ??????? }
          ??????? client.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
          ??????? client.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
          ??????? GetMethod method = new GetMethod(url);
          ??????? method.addRequestHeader("Content-Type", "text/html; charset=utf-8");
          ??????? try {
          ??????????? int statusCode = client.executeMethod(method);
          ??????????? if (statusCode != HttpStatus.SC_OK) {
          ??????????????? throw new HttpException("HttpStatusCode : " + statusCode);
          ??????????? }
          ??????????? InputStream is = method.getResponseBodyAsStream();
          ??????????? DOMParser parser = new DOMParser();
          ??????????? parser.setProperty("??????????? parser.parse(new InputSource(is));
          ??????????? return (parser.getDocument());
          ??????? } catch (HttpException he) {
          ??????????? he.printStackTrace();
          ??????? } catch (IOException ie) {
          ??????????? ie.printStackTrace();
          ??????? } catch (SAXException se) {
          ??????????? se.printStackTrace();
          ??????? }
          ??????? return null;
          ??? }
          }


          評論

          # re: httpclient+nekohtml 解析HTML 2008-04-01 09:25 隔葉黃鶯
          如果 html 頁面完全不規范就不好辦了,如
          <h1><div>kkkkk</h1></div>  回復  更多評論
            

          # re: httpclient+nekohtml 解析HTML 2008-04-01 17:13 lexy
          @隔葉黃鶯

          這個我也沒具體測試過,呵呵。
          不過 nekohtml 的介紹是這樣說的:
          這個解析器能投掃描HTML文件并“修正”許多作者(人或機器)在編寫HTML文檔過程中常犯的錯誤。NekoHTML能增補缺失的父元素、自動用結束標簽關閉相應的元素,以及不匹配的內嵌元素標簽。

          我在用的過程中暫時還沒發現什么大問題,呵呵。
            回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 金溪县| 漳平市| 万全县| 西和县| 衢州市| 兴城市| 芒康县| 北辰区| 麻城市| 湖南省| 望都县| 静海县| 屏东市| 龙江县| 海林市| 闸北区| 屯门区| 察哈| 营山县| 红安县| 太仆寺旗| 乌审旗| 横山县| 安徽省| 黄大仙区| 沙洋县| 木里| 阳谷县| 杭锦后旗| 南溪县| 青海省| 耒阳市| 名山县| 余干县| 铜川市| 宁晋县| 夏津县| 上高县| 泸州市| 苍梧县| 临城县|